MultiIndex列DataFrame的成对差异

时间:2019-05-18 12:38:39

标签: python pandas

我有一个带有MultiIndex列的DataFrame,如下所示:

columnIdx1 = ["M1", "M2", "M3", "M4"]
columnIdx2 = ["pos", "neg"]
df = pd.DataFrame(data=np.random.randn(1000, 8), columns=pd.MultiIndex.from_product([columnIdx1, columnIdx2]))

然后我用df.mean()计算平均值,得出相同的列,但只有一行。

A:

     M1       M2       M3       M4
pos neg  pos neg  pos neg  pos neg
  1   8    2   7    3   6    4   5

现在,我想像这样计算每个negpos的差值:

B:

M1 M2 M3 M4
 7  5  3  1

我的第一个想法是将columnIdx1列转换为行索引,但是我没有找到方法:

   pos neg
M1   1   8
M2   2   7
M3   3   6
M4   4   5

1 个答案:

答案 0 :(得分:3)

使用Series.unstack进行重塑,然后减去列:

df = df.mean().unstack()
df['diff'] = df['neg'] - df['pos']
print (df)

         neg       pos      diff
M1  0.023254  0.017009  0.006245
M2 -0.028798 -0.054146  0.025349
M3 -0.007544 -0.013178  0.005634
M4  0.049680 -0.046202  0.095882