【问题标题】:pandas: append new column of row subtotals熊猫:追加行小计的新列
【发布时间】:2016-09-13 14:37:14
【问题描述】:

这与this question 非常相似,只是我希望我的代码能够应用于数据帧的长度,而不是特定的列。

我有一个 DataFrame,我试图将每一行的总和作为一列附加到 DataFrame 中。

df = pd.DataFrame([[1,0,0],[20,7,1],[63,13,5]],columns=['drinking','drugs','both'],index = ['First','Second','Third'])

        drinking  drugs  both
First          1      0     0
Second        20      7     1
Third         63     13     5

期望的输出:

        drinking  drugs  both  total
First          1      0     0      1
Second        20      7     1     28
Third         63     13     5     81

当前代码:

df['total'] = df.apply(lambda row: (row['drinking'] + row['drugs'] + row['both']),axis=1)

这很好用。但是,如果我有另一个数据框,有七列,不称为“饮酒”、“药物”或“两者”,该怎么办?是否可以调整此功能以使其适用于数据帧的长度?这样我就可以将函数用于任何数据帧,具有不同数量的列,而不仅仅是一个包含名为“饮酒”、“药物”和“两者”的列的数据帧?

类似:

df['total'] = df.apply(for col in df: [code to calculate sum of each row]),axis=1)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用sum:

    df['total'] = df.sum(axis=1) 
    

    如果您只需要对某些列求和,请使用子集:

    df['total'] = df[['drinking', 'drugs', 'both']].sum(axis=1) 
    

    【讨论】:

      【解决方案2】:

      这样的事情怎么样:

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

      输出:

      Out[4]: 
              drinking  drugs  both  Total
      First          1      0     0      1
      Second        20      7     1     28
      Third         63     13     5     81
      

      它将逐行汇总所有列。

      【讨论】:

        猜你喜欢
        • 2023-02-26
        • 1970-01-01
        • 2015-01-02
        • 2021-10-26
        • 2016-07-21
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        相关资源
        最近更新 更多