我有一个带有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
现在,我想像这样计算每个neg
和pos
的差值:
B:
M1 M2 M3 M4
7 5 3 1
我的第一个想法是将columnIdx1列转换为行索引,但是我没有找到方法:
pos neg
M1 1 8
M2 2 7
M3 3 6
M4 4 5
答案 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