pandas的pivot_table功能,按层级对汇总值进行排序

income是网上随便找的一个行业销售的数据量。
练习pivot_table这个功能时,进行到了这一步,获得结果:

df=income.pivot_table(index=['大行业','细分'],values=['销售额'],aggfunc=np.sum)
df

pandas的pivot_table功能,按层级对汇总值进行排序_第1张图片
这时想对各行业的销售额,按照从大到小进行排序,但是研究了pivot里面的各个参数,没有找到能实现这个功能的。后来想了一下,用了个其实挺麻烦的方法实现了。

说下想法:
排序想分两个层级,先按“大行业”汇总数排逆序,再按“细分”汇总数排逆序

1.目前缺第一个层级里面的“大行业”汇总数,先用groupby汇总“大行业”汇总金额;再用reset_index功能将"大行业"由index变为column,得到结果:

dahangye_sum=pd.DataFrame(income.groupby(by=['大行业'])['销售额'].sum()).reset_index()
dahangye_sum

pandas的pivot_table功能,按层级对汇总值进行排序_第2张图片
2.将最开始pivot汇总好的df表进行拆解,将“大行业”的index属性释放,变为column,为下一步的合并做准备。

df_new=df.reset_index()
df_new

pandas的pivot_table功能,按层级对汇总值进行排序_第3张图片

3.二表合并,先得到一个按“大行业”最为key的联合表,再按照大行业金额、细分金额进行排序。

merge=pd.merge(df_new,hangye_sum,on=['大行业'])
merge=merge.sort_values(by=['销售额_y','销售额_x'],ascending=False)

pandas的pivot_table功能,按层级对汇总值进行排序_第4张图片
4.恢复索引就可以了,目前表上多了一列销售额_y,我把他也加到最后的表里面了,也可以删掉。最后得到了个按照“大行业”、“细分”总销售额降序排列的汇总表。

merge.set_index(['大行业','销售额_y','细分'])

pandas的pivot_table功能,按层级对汇总值进行排序_第5张图片

你可能感兴趣的:(pandas的pivot_table功能,按层级对汇总值进行排序)