为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止堆栈对索引进行排序?

如何防止堆栈对索引进行排序?

动漫人物 2023-03-16 15:47:12
我有一个测试数据框: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_valuesDataFrame.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


查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信