取消堆叠并重新排序pandas数据帧

时间:2017-11-30 18:30:23

标签: python pandas dataframe pandas-groupby

我已经四处寻找但是找不到解决方法来解决如何对大熊猫数据帧进行拆分和重新排序。

假设我有以下数据框:

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]})

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

df.groupby(['type', 'band']).mean().unstack(level=1)

我的问题是,如何对列进行重新排序,使它们处于降序(或更常见的是,任意排序)的顺序?

输出如下:

    val
band    A   B           C
type            
1   0.215   0.230000    0.210
2   0.240   0.223333    0.235

我想要的是以下内容:

    val
band    C   B           A
type            
1   0.210   0.230000    0.215
2   0.235   0.223333    0.240

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

2 个答案:

答案 0 :(得分:2)

您似乎希望列上的sort_index

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

结果:

        val              
band      C      B      A
type                     
1     0.210  0.230  0.215
2     0.235  0.223  0.240

至于任意顺序:说你的订单是" C,A,B"。通常,您必须直接指定它。

order = list('CAB')
df[order]

答案 1 :(得分:2)

df.groupby(['type', 'band']).mean().unstack(level=1)的输出是另一个DataFrame。您可以执行以下操作:

df = df.groupby(['type', 'band']).mean().unstack(level=1)
df = df.reindex_axis(sorted(df.columns, reverse=True), axis=1)