【问题标题】:Sum column of a hierarchical index?分层索引的总和列?
【发布时间】:2023-03-27 16:18:01
【问题描述】:

层次索引的列没有总和的DataFrame:

  dex1 dex2 dex3 one  two 
    H   D   A    1    2     
            B    4    5     
            C    7    8    
    I   E   A    1    1     
            B    2    2      
            C    3    3   

对于分层索引的列,具有总和的 DataFrame 应该是,对于列 df['one'] 索引 dex1、12 (1 + 4 + 7)、6 (1 + 2 + 3) 和列 df[ 'two'] 的索引 dex1, 12 (1 + 4 + 7), 6 (1 + 2 + 3)。

到目前为止,我已经尝试过:

df.loc[dex1].sum['one']

【问题讨论】:

    标签: python loops pandas dataframe indexing


    【解决方案1】:

    你可以使用groupby + GroupBy.sum:

    df1 = df.groupby(level='dex1').sum()
    print (df1)
          one  two
    dex1          
    H      12   15
    I       6    6
    

    从熊猫的版本0.20.0 是可能的omit level 参数。

    df1 = df.groupby('dex1').sum()
    print (df1)
          one  two
    dex1          
    H      12   15
    I       6    6
    

    或者使用DataFrame.sum和参数level

    df1 = df.sum(level=0)
    print (df1)
          one  two
    dex1          
    H      12   15
    I       6    6
    
    df1 = df.sum(level='dex1')
    print (df1)
          one  two
    dex1          
    H      12   15
    I       6    6
    

    【讨论】:

    • 这个答案在实施时是正确的。出于我的目的,我尽量避免使用 .groupby(),所以 df.sum(level=int) 效果很好。谢谢!
    • 为澄清起见,当您说在 pandas 0.20.1 中可以省略 level 时,可以说 df1 = df.groupby('dex1').sum()?
    • 是的,完全正确。我添加链接。
    猜你喜欢
    • 2019-01-12
    • 2010-10-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多