我是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
感谢所有能够提供帮助的人!
答案 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