首页 > 解决方案 > 更改多索引 Pandas 数据框中的列分组

问题描述

假设有一个数据框:

df = pd.DataFrame({
    'day': ['mon', 'mon', 'mon'],
    'fruit': ['apple', 'apple', 'orange'],
    'size': ['big', 'small', 'big'],
    'price': [10, 11, 15],
    'amount': [10, 10, 20]
}).set_index('day')

df = df.groupby(['day', 'fruit', 'size'])['price', 'amount'].apply(lambda df: df.reset_index(drop=True)).unstack(level=[2])

                        price          amount
size             big    small    big    small
day fruit                   
mon apple   0   10.0     11.0   10.0     10.0
   orange   0   15.0      NaN   20.0      NaN

我想将列的顺序从价格->大/小、金额->大/小更改为大->价格/金额、小->价格/金额。所以预期的数据框是:


                           big           small
size             price  amount   price  amount
day fruit                   
mon apple   0   10.0     10.0   11.0     10.0
   orange   0   15.0       20    Nan      NaN

实现这一目标的方法是什么?

标签: pandas

解决方案


尝试swaplevelsort_index

df_swap = df.swaplevel(0, 1, axis=1).sort_index(axis=1, ascending=[True,False])

Out[840]:
size           big        small
             price amount price amount
day fruit
mon apple  0  10.0   10.0  11.0   10.0
    orange 0  15.0   20.0   NaN    NaN

推荐阅读