熊猫:追加行小计的新列
Posted
技术标签:
【中文标题】熊猫:追加行小计的新列【英文标题】: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)
【问题讨论】:
【参考方案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
它将逐行汇总所有列。
【讨论】:
以上是关于熊猫:追加行小计的新列的主要内容,如果未能解决你的问题,请参考以下文章