在数据框中求所有数值的总和。

18

我想将数据框中的所有值加总成一个数字。

例如,对于以下数据框:

            BBG.XAMS.FUR.S_pnl_pos_cost  BBG.XAMS.MT.S_pnl_pos_cost
date                                                               
2015-03-23                    -0.674996                   -0.674997
2015-03-24                    82.704951                   11.868748
2015-03-25                   -11.027327                   84.160210
2015-03-26                   228.426675                 -131.901556
2015-03-27                   -99.744986                  214.579858
我希望返回值为377.71658。我已经尝试过df.sum(),但那只能按列求和。

1
print(df.sum().sum())? - Padraic Cunningham
假设有一种解决方案可以将两列求和作为单个操作,那么将每列的总和相加作为第二步有什么问题呢? - Thijs van Dien
5个回答

19

我会做

>>> df.values.sum()
377.71658000000002

如果数据框中的所有内容都是数字,那么将其转换为底层的numpy数组可能是最快的选择。但还有很多其他选项:

>>> %timeit df.values.sum()
100000 loops, best of 3: 6.27 µs per loop
>>> %timeit df.sum().sum()
10000 loops, best of 3: 109 µs per loop
>>> %timeit df.unstack().sum()
1000 loops, best of 3: 233 µs per loop
>>> %timeit df.stack().sum()
1000 loops, best of 3: 190 µs per loop

2
请注意,如果您的值为NaN,则此操作将失败。您可以将NaN替换为零。df.fillna(0).values.sum() - Brig
https://dev59.com/tVkT5IYBdhLWcg3wWOJA - AMC

6

只需将列求和:

df.sum().sum()

或者为了更好的性能:

np.nansum(df)

请注意,在对 NaN 进行求和时,您需要使用 nansum 将其视为零。
时间记录:
# Create dataframe with 1m rows and 100 columns.
np.random.seed(0)
rows = 1_000_000
cols = 100
df = pd.DataFrame(np.random.randn(rows, cols))
# Add one thousand NaNs.
for row, col in zip(np.random.randint(0, rows, 1000),
                    np.random.randint(0, cols, 1000)):
    df.iat[row, col] = np.nan

%timeit np.nansum(df)
# 274 ms ± 3.24 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df.fillna(0).to_numpy().sum()
# 974 ms ± 3.97 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df.sum().sum()
# 1.04 s ± 3.24 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

>>> df.to_numpy().sum()
nan

>>> np.nansum(df)
5965.87530314851

https://dev59.com/tVkT5IYBdhLWcg3wWOJA - AMC

2
如果数据框包含非数字数据,并且只想获取整数的总和,请执行以下操作:
df.sum(numeric_only=True).sum()

https://dev59.com/tVkT5IYBdhLWcg3wWOJA - AMC

0

要对数据框中的整数/浮点数列求和,请使用以下查询:

df.sum()

要找出特定列值的总和,可以使用列索引:

d = df.sum()
d[2]

0

另一个选项:

np.array(df.iloc[:,1:).sum()

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