数据框中更快的列乘法

faster column-multiply in dataframe

我有一个 pandas 数据框 A,它有 2 列 x 和 y。我想将它们相乘 B = A['x'] * A['y']。有没有更快的方法来做到这一点? A['a'].mul(A['y']) 会更快吗?

Numpy 更快,如果您的列很长,您可以使用 np.arrays

import numpy as np

B=np.array(A.x)*np.array(A.y)

在我的 PC 上对具有 55K 行的数据帧进行的快速测试将时间从 0.78 秒(您的原始方法)减少到 0.54 秒(上述方法)

我只能同意@IoaTzimas 的评论,Numpy 更快。因此,您最好将要相乘的 Dataframe 列转换为 Numpy arrays 并使用它们。

如果您有数组中的初始数据,您可以将它们转换为 numpy 数组并使用它。

如果您的数据在 Dataframe 中并且需要事先提取它,您可以执行以下操作:

from numpy import multiply as npMultiply

# get the values from the Dataframe to arrays
x_array = A['x'].values
y_array = A['y'].values

B = npMultiply(x_array, y_array)

要检查哪个更快,您可以检查每种情况所需的时间: 在 Ipython 或木星中将是:

%%timeit
    d['a'] * d['b']

对于像这样的数据框:

a = np.arange(0,10000)
b = np.ones(10000)

d = pd.DataFrame(np.vstack([a,b]).T, columns=["a","b"])

得到你的乘法:

1- 在pandas

d['a'] * d['b']
81.2 µs ± 977 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

2 - 在 numpy 中。避免 pandas 开销

d['a'].values * d['b'].values
9.21 µs ± 41.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

...如果您非常担心速度,请使用 numpy。利用 pandas 的好特性,允许您访问具有 values.

特性的数组