![](/img/trans.png)
[英]Sum selected columns for each level in Pandas Multiindex dataframe
[英]How to sort a multiindex pandas dataframe pivot table by the totals of an agg='sum' at each level of the index
示例生成类似
df = pd.pivot_table(df, index=['name1','name2','name3'], values='total', aggfunc='sum')
最初没有逻辑排序
name1 name2 name3 total
Bob Mario Luigi 5
John Dan 16
Dave Tom Jim 2
Joe 6
Jack 3
Jill Frank 6
Kevin 7
应该成为
name1 name2 name3 total
Dave Jill Kevin 7
Frank 6
Tom Joe 6
Jack 3
Jim 2
Bob John Dan 16
Mario Luigi 5
Dave之所以排名靠前,是因为他的“ total”(总数)比Bob的21高。它也传播到每个后续索引,因此Jill的13> Tom的11等。 ()并确定我真的不知道自己在做什么。
您可以做的是创建其他列,然后进行多列排序。 对于其他列, transform
将返回一个序列,其索引与df对齐,因此您可以将其添加为新列:
from pandas import DataFrame
mydf = DataFrame({"name1":\
["bob","bob","dave","dave","dave","dave","dave"],"name2":\
["mario","john","tom","tom","tom","jill","jill"],"name3":\
["luigi","dan","jim","joe","jack","frank","kevin"],"total":[5,16,2,6,3,6,7]})
mydf["tot1"]=mydf["total"].groupby(mydf["name1"]).transform(sum)
mydf["tot2"]=mydf["total"].groupby(mydf["name2"]).transform(sum)
mydf["tot3"]=mydf["total"].groupby(mydf["name3"]).transform(sum)
mydf.sort_values(by=["tot1","tot2","tot3"],ascending=[False,False,False])
产生:
name1 name2 name3 total tot1 tot2 tot3
6 dave jill kevin 7 24 13 7
5 dave jill frank 6 24 13 6
3 dave tom joe 6 24 11 6
4 dave tom jack 3 24 11 3
2 dave tom jim 2 24 11 2
1 bob john dan 16 21 16 16
0 bob mario luigi 5 21 5 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.