【问题标题】:Pandas sum of multi-indexed columnsPandas 多索引列的总和
【发布时间】:2016-09-02 06:36:23
【问题描述】:

如果我有一个嵌套标题如下的数据框:

              John          Joan
         Smith,   Jones,    Smith,
Index1     234      432      324
Index2     2987     234      4354

...如何创建一个对每一行的值求和的新列? 我试过df['sum']=df['John']+df['Joan'] 但这导致了这个错误:

ValueError: Wrong number of items passed 3, placement implies 1

【问题讨论】:

    标签: python-3.x pandas multi-index


    【解决方案1】:

    如果我理解正确的话:

    ...如何创建一个对每一行的值求和的新列?

    解决方案

    每一行的总和就是

    df.sum(axis=1)
    

    诀窍是成为一个新专栏。您需要确保您添加的列具有 2 级列标题。

    df.loc[:, ('sum', 'sum')] = df.sum(axis=1)
    

    我对此不满意,但它确实有效。

             Joan   John          sum
           Smith, Jones, Smith,   sum
    Index1    324    432    234   990
    Index2   4354    234   2987  7575
    

    【讨论】:

    • 感谢你们俩。如果前面有一些我不想要总和的其他列,我将如何创建新的总和列,如上所述?例如,如果第一列是姓名,第二列是年龄,我将如何忽略这些?
    • 我想出了我的后续问题:首先,将要求和的列集定义为这样的变量:cols=df[['a','b']]。接下来,像这样使用该变量: df.loc[:, ('sum', 'sum')] = cols.sum(axis=1)
    【解决方案2】:

    舞会,好久没有你的消息了。

    您想要分组,但指定一个级别和轴。 axis=1 表示您想要对行而不是列求和。 level=0 是列的第一行。

    df = pd.DataFrame({
        ('John', 'Smith,'): [234, 2987], 
        ('John', 'Jones,'): [432, 234], 
        ('Joan', 'Smith,'): [324, 4354]}, index=['Index1', 'Index2'])
    
    >>> df.groupby(level=0, axis=1).sum()
            Joan  John
    Index1   324   666
    Index2  4354  3221
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 2021-12-12
      • 2017-03-04
      • 2019-02-04
      • 2010-10-01
      • 2016-12-16
      • 2018-10-17
      • 2016-01-16
      • 2020-04-13
      相关资源
      最近更新 更多