首页 > 解决方案 > 根据索引和列之间的匹配,有选择地将数据帧的元素相乘以获取数字

问题描述

假设我们有一个维度为 nxn 的数据帧 df,具有两个不同的索引级别,行和列相同。我需要根据行索引和列索引之间的匹配,选择性地乘以 df 的某些元素。

这里有一个例子来澄清这个问题:

df = pd.DataFrame(np.ones((5,5)), index=[['A','A','B','B','C'], [1,2,1,2,1]], columns=[['A','A','B','B','C'], [1,2,1,2,1]])

现在我想以这种方式将 df 中的元素相乘:

预期输出应该是包含以下元素的数据框:

     A A B B C
     1 2 1 2 1

A 1  1 2 3 4 3
A 2  2 1 4 3 4
B 1  3 4 1 2 3
B 2  4 3 2 1 4
C 1  3 4 3 4 1

标签: pythonpandasdataframe

解决方案


这是相当手动的,但会:

offsets = [i + (df.columns.get_level_values(i).values[:,None] != df.index.get_level_values(i).values)
           for i in range(2)]

# output:
df.mul(offsets[0]*2 + offsets[1])

输出:

       A         B         C
       1    2    1    2    1
A 1  1.0  2.0  3.0  4.0  3.0
  2  2.0  1.0  4.0  3.0  4.0
B 1  3.0  4.0  1.0  2.0  3.0
  2  4.0  3.0  2.0  1.0  4.0
C 1  3.0  4.0  3.0  4.0  1.0

推荐阅读