如何基于特定列对MultiIndex Pandas数据透视表进行排序

时间:2019-01-21 20:22:14

标签: python pandas multi-index

我是Python的新手,正在尝试使用Pandas数据透视表。我进行了搜索,但是没有找到我想要的答案。基本上,我正在尝试对下面的pandas数据透视表进行排序

import numpy as np
import pandas as pd

df = pd.DataFrame({

"TIME":["FQ1","FQ2","FQ2","FQ2"],
"NAME":["Robert",'Miranda',"Robert","Robert"],
"TOTAL":[900,42,360,2000],
"TYPE":["Air","Ground","Air","Ground"],
"GROUP":["A","A","A","A"]})

pt = pd.pivot_table(data=df,
               values =["TOTAL"], aggfunc = (np.sum),
               index = ["GROUP","TYPE","NAME"],
               columns = "TIME",
               fill_value=0,
               margins = True)

基本上,我希望根据每一行的总和对“类型”和“名称”列进行排序。

在这种情况下,最终目标将是“地面”类型首先出现在“空中”之前,并且在“地面”类型中,我希望罗伯特出现在米兰达之前,因为他的总和更高。

这是现在的样子:

                     TOTAL            
TIME                   FQ1   FQ2   All
GROUP TYPE   NAME                     
A     Air    Robert    900   360  1260
      Ground Miranda     0    42    42
             Robert      0  2000  2000
All                    900  2402  3302

感谢所有能够提供帮助的人!

1 个答案:

答案 0 :(得分:0)

尝试一下,因为您的列标题是多索引,所以您需要使用元组来访问列:

pt.sort_values(['GROUP','TYPE',('TOTAL','All')], 
               ascending=[True, True, False])

输出:

                     TOTAL            
TIME                   FQ1   FQ2   All
GROUP TYPE   NAME                     
A     Air    Robert    900   360  1260
      Ground Robert      0  2000  2000
             Miranda     0    42    42
All                    900  2402  3302