按“边距('All')值”列对Pandas数据透视表排序

2024-05-20 18:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图按pandas透视表中的行的总和对最后一列/margins/aggrfunc进行降序排序。我知道我遗漏了一些简单的东西,但我想不出来。

数据框/透视表:

WIDGETS         
DATE    2/1/16  2/2/16  2/3/16  All
NAME                
PERSON1 43      5               48
PERSON2         4       7       11
PERSON3         56      143     199

我需要它也按aggfunc/margins排序:

WIDGETS         
DATE    2/1/16  2/2/16  2/3/16  All
NAME                
PERSON3         56      143     199
PERSON1 43      5               48
PERSON2         4       7       11

pt = pd.pivot_table(df,values=['WIDGETS'],index=['NAME'],columns=['DATE'],aggfunc=len,fill_value='',margins=True,margins_name='WIDGETS')
pt.sort_values(by='WIDGETS',ascending=False,inplace=True)

错误: ValueError:无法在多索引中按列小部件排序,需要显式地提供所有级别

建议?


Tags: namepttruepandasdate排序allwidgets
1条回答
网友
1楼 · 发布于 2024-05-20 18:21:49

可以在函数^{}和参数ascending中使用tuple:

print pt
        WIDGETS                  
DATE     2/1/16 2/2/16 2/3/16 All
NAME                             
PERSON1       1      2          3
PERSON2       2      4      3   9
PERSON3       1             1   2
All           4      6      4  14

pt.sort_values(by=('WIDGETS', 'All'), ascending=False,inplace=True)
print pt
        WIDGETS                  
DATE     2/1/16 2/2/16 2/3/16 All
NAME                             
All           4      6      4  14
PERSON2       2      4      3   9
PERSON1       1      2          3
PERSON3       1             1   2

相关问题 更多 >