我有一个测试数据框:df1 = pd.DataFrame({ "Group1": ["X", "Y", "Y", "X", "Y", "Z", "X", "Y"], "Group2": ["A", "C", "A", "B", "C", "C", "B", "A"], "Number1": [1, 3, 5, 1, 5, 2, 5, 3], "Number2": [6, 2, 6, 2, 7, 2, 6, 8],})df2 = df1.pivot_table(index="Group1", columns="Group2", margins=True)print(df2)输出: Number1 Number2 Group2 A B C All A B C AllGroup1 X 1.0 3.0 NaN 2.333333 6.000000 4.0 NaN 4.666667Y 4.0 NaN 4.000000 4.000000 7.000000 NaN 4.500000 5.750000Z NaN NaN 2.000000 2.000000 NaN NaN 2.000000 2.000000All 3.0 3.0 3.333333 3.125000 6.666667 4.0 3.666667 4.875000当我调用stack这个数据框时,我得到了这个结果:df3 = df2.stack()print(df3)输出: Number1 Number2Group1 Group2 X A 1.000000 6.000000 All 2.333333 4.666667 B 3.000000 4.000000Y A 4.000000 7.000000 All 4.000000 5.750000 C 4.000000 4.500000Z All 2.000000 2.000000 C 2.000000 2.000000All A 3.000000 6.666667 All 3.125000 4.875000 B 3.000000 4.000000 C 3.333333 3.666667如何防止stack对索引进行排序以使 的顺序Group2保持为A, B, C, All?
1 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
IIUC,我们需要pd.Index.get_level_values
和DataFrame.reindex
df2.stack().reindex(df2.columns.get_level_values(1).unique(), level='Group2')
Number1 Number2
Group1 Group2
X A 1.000000 6.000000
B 3.000000 4.000000
All 2.333333 4.666667
Y A 4.000000 7.000000
C 4.000000 4.500000
All 4.000000 5.750000
Z C 2.000000 2.000000
All 2.000000 2.000000
All A 3.000000 6.666667
B 3.000000 4.000000
C 3.333333 3.666667
All 3.125000 4.875000
我们可以使用level='Group2'或level=1
添加回答
举报
0/150
提交
取消