熊猫更改数据透视表中列的顺序

时间:2019-03-29 11:11:56

标签: pandas pivot-table

数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。

示例df:

test_df = pd.DataFrame({'name':['name_1','name_1','name_1','name_2','name_2','name_2','name_3','name_3','name_3'], 
                        'month':[1,2,3,1,2,3,1,2,3], 
                        'salary':[100,100,100,110,110,110,120,120,120], 
                        'status':[1,1,2,1,1,3,2,2,1]})

制作枢轴代码:

test_df.pivot_table(index='name', columns=['month'], 
             values=['salary', 'status'])

实际输出:

       salary           status      
month       1    2    3      1  2  3
name                                
name_1    100  100  100      1  1  2
name_2    110  110  110      1  1  3
name_3    120  120  120      2  2  1

我想看的输出:

       salary status salary status salary status             
month       1     1      2      2      3      3
name
name_1    100     1     100     1     100     2
name_2    110     1     110     1     110     3
name_3    120     2     120     2     120     1

3 个答案:

答案 0 :(得分:7)

您将使用sort_index来指示轴和水平:

piv = test_df.pivot_table(index='name', columns=['month'], 
             values=['salary', 'status'])
piv.sort_index(axis='columns', level='month')
#       salary status salary status salary status
#month       1      1      2      2      3      3
#name                                            
#name_1    100      1    100      1    100      2
#name_2    110      1    110      1    110      3
#name_3    120      2    120      2    120      1

答案 1 :(得分:3)

DataFrame.sort_indexaxis=1level=1参数一起使用

(test_df.pivot_table(index='name', columns=['month'], 
             values=['salary', 'status'])
 .sort_index(axis=1, level=1))

[出]

       salary status salary status salary status
month       1      1      2      2      3      3
name                                            
name_1    100      1    100      1    100      2
name_2    110      1    110      1    110      3
name_3    120      2    120      2    120      1

答案 2 :(得分:0)

import pandas as pd

df = pd.DataFrame({'name': 
['name_1','name_1','name_1','name_2','name_2','name_2','name_3','name_3','name_3'], 
                        'month':[1,2,3,1,2,3,1,2,3], 
                        'salary':[100,100,100,110,110,110,120,120,120], 
                        'status':[1,1,2,1,1,3,2,2,1]})



df = df.pivot_table(index='name', columns=['month'], 
             values=['salary', 'status']).sort_index(axis='columns', level='month')
print(df)