如何在特定级别对 pandas 中的 MultiIndexed 列进行操作?

How can I operate with MultiIndexed columns in pandas in specific levels?

在pandas中使用简单的列,您可以非常直接地对列进行操作。例如,如果您有一个 DataFrame df,其中包含数字列 AB,您可以计算:

df['C']=df['A']+df['B']

使用MultiIndex列,同样可以,只要对MultiIndex的各级进行操作即可。例如,如果您的 DataFrame 的列是 (A,X), (A,Y), (B, X),(B,Y),可以写成

df[('C','X')]=df[('A','X')]+df[('B','X')]

并且生成的 DataFrame 将有一个额外的列,(C,X) 等于 df[A,X]+df[B,X].

在特定级别执行此操作的最直接方法是什么?更具体地说,我正在寻找类似

的东西
df['C']=df['B']+df['A']

,创建两列 (C,X)(C,Y),它们等于 df[A,X]+df[B,X]df[A,Y]+df[B,Y],但这是一个 ValueError。

我们可以reshape数据框来简化操作:

df.stack().eval('C = A + B').unstack()

或者,您可以使用 concat 附加额外级别 C:

df.join(pd.concat({'C': df['A'] + df['B']}, axis=1))

   A     B      C    
   X  Y  X  Y   X   Y
0  9  4  8  2  17   6
1  3  7  0  8   3  15
2  2  7  0  7   2  14
3  3  8  4  8   7  16
4  8  2  3  6  11   8