【问题标题】: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

...删除多索引层,但是,它需要手动重命名之后的列。

【问题讨论】:

    标签: python pandas merge pivot-table multi-index


    【解决方案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')
    

    【讨论】:

    • 谢谢,这正是我所需要的
    • 不客气。顺便提一句。我只是更改了代码,因为连接有时会出现问题。我想使用格式更安全。例如。如果您的列索引具有非字符串级别。格式应自动处理此类问题。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2018-07-16
    • 1970-01-01
    • 2016-12-21
    • 2021-08-21
    相关资源
    最近更新 更多