gpt4 book ai didi

python - 将 2 个 Pandas 列相乘并获得值总和的最快方法

转载 作者:行者123 更新时间:2023-12-01 08:24:24 25 4
gpt4 key购买 nike

我正在进行大量计算,将一个名为“factor”的 pandas 列与另一个名为“value”的列相乘,然后计算乘法的总和。

两列的长度通常约为 200 行。鉴于这是我在当前项目中进行数千次的计算,我需要它尽可能快

代码的缩小版本如下所示(只有 4 行)

  dict = {'factor': [0.25,0.25,0.25,0.25],
'value': [22000,25000,27000,35000] }

df = pd.DataFrame(dict, columns= ['factor', 'value'])

print((df['factor'] * df['value']).sum())

打印出 27250。

有没有办法更快地获得相同的结果?

最佳答案

您可以使用numpy - 通过values然后numpy.sum将列转换为一维数组:

np.random.seed(456)

d = {'factor': np.random.rand(200),
'value': np.random.randint(1000, size=200)}

df = pd.DataFrame(d, columns= ['factor', 'value'])
#print (df)

In [139]: %timeit ((df['factor'] * df['value']).sum())
245 µs ± 2.64 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [140]: %timeit (np.sum((df['factor'].values * df['value'].values)))
20.6 µs ± 328 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

如果可能的话,某些缺失值会在输出中得到 NaN,因此需要 numpy.nansum 来防止它:

np.random.seed(456)

d = {'factor': np.random.rand(200),
'value': np.random.randint(1000, size=200)}

df = pd.DataFrame(d, columns= ['factor', 'value'])
df['value'] = df['value'].mask(df['value'] > 700)
#print (df)

In [144]: %timeit ((df['factor'] * df['value']).sum())
235 µs ± 8.65 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [145]: %timeit (np.nansum((df['factor'].values * df['value'].values)))
33.3 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

关于python - 将 2 个 Pandas 列相乘并获得值总和的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com