在Pandas数据帧中对所有值求和的最佳方法是什么?

Bil*_*ill 21 python numpy sum dataframe pandas

我想出了这两种方法.还有更好的吗?

>>> import pandas as pd
>>> df = pd.DataFrame({'A': [5, 6, 7], 'B': [7, 8, 9]})
>>> print df.sum().sum()
42
>>> print df.values.sum()
42
Run Code Online (Sandbox Code Playgroud)

只是想确保我没有遗漏更明显的东西.

piR*_*red 33

df.to_numpy().sum()
Run Code Online (Sandbox Code Playgroud)

是底层的numpy数组

df.values
Run Code Online (Sandbox Code Playgroud)

是numpy sum方法并且更快

  • 它更快纯粹是因为一个函数调用另一个函数还是有一些更根本的区别? (2认同)
  • @kuanb有两个原因.一,``df.values.sum()`是一个'numpy`操作,大部分时间,`numpy`更高效.二,`numpy`对数组中所有元素求和,无论维数如何.`pandas`需要为每个维度单独调用一个`sum`. (2认同)

Rav*_*ven 6

添加一些数字来支持这一点:

import numpy as np, pandas as pd
import timeit
df = pd.DataFrame(np.arange(int(1e6)).reshape(500000, 2), columns=list("ab"))

def pandas_test():
    return df['a'].sum()

def numpy_test():
    return df['a'].to_numpy().sum()

timeit.timeit(numpy_test, number=1000)  # 0.5032469799989485
timeit.timeit(pandas_test, number=1000)  # 0.6035906639990571
Run Code Online (Sandbox Code Playgroud)

因此,仅针对级数求和,我们的机器就获得了 20% 的性能!