从Pandas数据帧中求多列的总和

15

假设我有以下表格:

In [2]: df = pd.DataFrame({'a': [1,2,3], 'b':[2,4,6], 'c':[1,1,1]})

In [3]: df
Out[3]: 
   a  b  c
0  1  2  1
1  2  4  1
2  3  6  1

我可以用这种方式求a和b的总和:

In [4]: sum(df['a']) + sum(df['b'])
Out[4]: 18

然而,对于较大的数据框,这并不是很方便,因为您必须将多列相加。

是否有更简洁的方法来求和列(类似于以下内容)?如果我想对整个数据框进行求和而不指定列呢?

In [4]: sum(df[['a', 'b']]) #that will not work!
Out[4]: 18
In [4]: sum(df) #that will not work!
Out[4]: 21
2个回答

22

我认为您可以使用双重sum - 首先使用DataFrame.sum创建Series总和,然后使用第二个Series.sum获取Series的总和:

print (df[['a','b']].sum())
a     6
b    12
dtype: int64

print (df[['a','b']].sum().sum())
18

您也可以使用:

print (df[['a','b']].sum(axis=1))
0    3
1    6
2    9
dtype: int64

print (df[['a','b']].sum(axis=1).sum())
18

感谢pirSquared提供另一种解决方案-通过valuesdf转换为numpy array,然后使用sum

print (df[['a','b']].values.sum())
18

print (df.sum().sum())
21

2
还有 df[['a', 'b']].values.sum() - piRSquared

1
也许你正在寻找类似这样的东西:
df["result"] = df.apply(lambda row: row['a' : 'c'].sum(),axis=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接