熊猫以两列级别旋转DataFrame

时间:2018-11-26 07:51:56

标签: python pandas pivot-table

我有一个熊猫DataFrame,具有两个维度regionproducts,以及两个度量costprice

df = pd.DataFrame(
      {'region':['N', 'S', 'W', 'E', 'N', 'S', 'W', 'E'], 
       'product':['P1', 'P1', 'P1', 'P1', 'P2', 'P2', 'P2', 'P2'],
       'cost':[10, 13, 17, 28, 29, 23, 17, 18],
       'price':[7, 8, 4, 11, 9, 13, 7, 8]})

我想获得:

region      E                N            S           W    
        price cost   price cost   price cost   price cost
product                                            
P1         11  28     ...
P2          8  18     ...

我尝试过:

df1 = df.groupby(['product', 'region'])
       .agg({'price': 'first', 'cost': 'first'})
       .unstack('region')
       .swaplevel(axis=1)
print(df1)

但是我得到了

region      E     N     S     W    E    N    S    W
        price price price price cost cost cost cost
product                                            
P1         11     7     8     4   28   10   13   17
P2          8     9    13     7   18   29   23   17

我想念什么?

1 个答案:

答案 0 :(得分:1)

在列的MultiIndex的第一级添加reindex

df1 = (df.groupby(['product', 'region'])
       .agg({'price': 'first', 'cost': 'first'})
       .unstack('region')
       .swaplevel(axis=1)
       .reindex(columns=['E','N','S','W'], level=0))
print(df1)
region      E          N          S          W     
        price cost price cost price cost price cost
product                                            
P1         11   28     7   10     8   13     4   17
P2          8   18     9   29    13   23     7   17