如何合并熊猫数据透视表中的多索引层?
Posted
技术标签:
【中文标题】如何合并熊猫数据透视表中的多索引层?【英文标题】:How to merge multi-index layers in pandas pivot-table? 【发布时间】:2019-12-17 18:25:12 【问题描述】:假设我得到了这样的比赛中球员表现的数据框:
Match Faction A B
BG1 Alliance 8 10
BG1 Alliance 2 5
BG1 Horde 5 25
BG2 ...
我想汇总每场比赛的球队统计数据 A 和 B,换句话说,像这样获取数据框:
Match Alliance A Alliance B Horde A Horde B
BG1 10 15 5 25
BG2 ...
我知道我可以手动形成每一列,但我一直在寻找更优雅的方法来解决问题。所以,我尝试了这个:
df.pivot_table(values=['A', 'B'], index='Match', columns='Faction', aggfunc=lambda x: x.sum())
这给了我以下信息:
A B
Faction Alliance Horde Alliance Horde
Match
BG1 10 5 15 25
BG2 ...
现在,有什么方法可以合并这些多索引,将它们变成“Alliance A”、“Horde A”、“Alliance B”、“Horde B”列?我唯一的想法是申请
.T.reset_index().T
...删除多索引层,但是,它需要手动重命名之后的列。
【问题讨论】:
【参考方案1】:这很容易,因为您已经完成了大部分工作:
# create a list of the new column names in the right order
new_cols=[('1 0'.format(*tup)) for tup in pivoted.columns]
# assign it to the dataframe (assuming you named it pivoted
pivoted.columns= new_cols
# resort the index, so you get the columns in the order you specified
pivoted.sort_index(axis='columns')
【讨论】:
谢谢,这正是我所需要的 不客气。顺便提一句。我只是更改了代码,因为连接有时会出现问题。我想使用格式更安全。例如。如果您的列索引具有非字符串级别。格式应自动处理此类问题。以上是关于如何合并熊猫数据透视表中的多索引层?的主要内容,如果未能解决你的问题,请参考以下文章