取消堆叠并重新排序熊猫数据框

pau*_*ult 1 python dataframe pandas pandas-groupby

我四处搜索,但找不到有关如何取消堆叠和重新排序 Pandas 数据帧的解决方案。

假设我有以下数据框:

df = pd.DataFrame({'type': [1, 2, 2, 1, 2, 1, 2, 1, 2, 2],
                   'band': ['A', 'B', 'C', 'C', 'B', 'B', 'A', 'A', 'B', 'C'],
                   'val': [0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27]})
Run Code Online (Sandbox Code Playgroud)

我可以分组'type''band'获得两个维度的平均值,并用于unstack()显示'band'为列:

df.groupby(['type', 'band']).mean().unstack(level=1)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何对列重新排序,使它们按降序(或更一般地,任意排序)顺序排列?

输出如下所示:

    val
band    A   B           C
type            
1   0.215   0.230000    0.210
2   0.240   0.223333    0.235
Run Code Online (Sandbox Code Playgroud)

我想要的是以下内容:

    val
band    C   B           A
type            
1   0.210   0.230000    0.215
2   0.235   0.223333    0.240
Run Code Online (Sandbox Code Playgroud)

在实践中,我有超过 3 列。

Bra*_*mon 5

看起来你想要sort_index在列上:

df.groupby(['type', 'band']).mean().unstack(level=1)\
    .sort_index(axis=1, ascending=False)
Run Code Online (Sandbox Code Playgroud)

结果:

        val              
band      C      B      A
type                     
1     0.210  0.230  0.215
2     0.235  0.223  0.240
Run Code Online (Sandbox Code Playgroud)

至于任意订单:假设您的订单是“C、A、B”。通常,您必须直接指定此项。

order = list('CAB')
df[order]
Run Code Online (Sandbox Code Playgroud)