如何调整Pandas透视表中列多级索引的分组顺序
如何调整Pandas透视表中列多级索引的分组顺序
嘿,这个问题我之前折腾过好一会儿,Pandas透视表默认的列层级顺序确实和Excel不一样,但调整起来其实很简单!
先理清楚现状:你当前的透视表列层级是「指标(MoneySpent/PersonID)」作为第一级分组,「停留时长类别」嵌套在里面;而你想要反过来,让「停留时长」作为第一级分组,每个分组下再展示对应的人数和消费总额——这正是Excel透视表的默认逻辑。
解决方案:调换列多级索引的层级顺序
你已经生成了透视表pv,只需要执行以下两步操作就能得到想要的结构:
# 调换列的多级索引层级,将停留时长类别放到第一级,指标放到第二级 pv = pv.reorder_levels([1, 0], axis=1) # 按列索引排序,让同一停留时长下的指标列集中在一起 pv = pv.sort_index(axis=1)
代码解释:
reorder_levels([1, 0], axis=1):原透视表的列索引分为两级,第一级是指标(位置0),第二级是停留时长类别(位置1),这个方法就是把这两个层级的位置调换,让停留时长成为第一级分组。sort_index(axis=1):这一步是为了让相同停留时长的列挨在一起,避免出现分散的情况,保证结构和Excel透视表一样整齐。
调整后的效果
执行完上面的代码后,你的透视表就会变成这样:
StayDuration 2-7 days 7-30 days < 2 days PersonID MoneySpent PersonID MoneySpent PersonID MoneySpent City Anaheim 1 1710 2 4130 1 1100 Rochester 1 100 3 2920 1 100 Toledo 2 510 1 1240 2 1500
可选优化:给层级添加明确名称
如果想要让表头的含义更清晰,还可以给列的多级索引加上名称:
pv.columns.names = ['StayDuration', 'Metric']
这样表头的层级就更一目了然啦!
备注:内容来源于stack exchange,提问作者Alexander Zorin
相关产品推荐
相关产品推荐

