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

我有一个测试数据框:


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       All

Group1                                                                    

X          1.0  3.0       NaN  2.333333  6.000000  4.0       NaN  4.666667

Y          4.0  NaN  4.000000  4.000000  7.000000  NaN  4.500000  5.750000

Z          NaN  NaN  2.000000  2.000000       NaN  NaN  2.000000  2.000000

All        3.0  3.0  3.333333  3.125000  6.666667  4.0  3.666667  4.875000

当我调用stack这个数据框时,我得到了这个结果:


df3 = df2.stack()

print(df3)

输出:


                Number1   Number2

Group1 Group2                    

X      A       1.000000  6.000000

       All     2.333333  4.666667

       B       3.000000  4.000000

Y      A       4.000000  7.000000

       All     4.000000  5.750000

       C       4.000000  4.500000

Z      All     2.000000  2.000000

       C       2.000000  2.000000

All    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?


动漫人物
浏览 72回答 1
1回答

缥缈止盈

IIUC,我们需要pd.Index.get_level_values和DataFrame.reindexdf2.stack().reindex(df2.columns.get_level_values(1).unique(), level='Group2')                Number1   Number2Group1 Group2                    X      A       1.000000  6.000000       B       3.000000  4.000000       All     2.333333  4.666667Y      A       4.000000  7.000000       C       4.000000  4.500000       All     4.000000  5.750000Z      C       2.000000  2.000000       All     2.000000  2.000000All    A       3.000000  6.666667       B       3.000000  4.000000       C       3.333333  3.666667       All     3.125000  4.875000我们可以使用level='Group2'或level=1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python