我正在使用拥有29M行的Pandas Dataframe。我正在进行基于四列的计算,这些列都是浮点数。
此通话耗时超过1100秒:
df['d_from_avg'] = df.apply(lambda row: \
math.sqrt((row.x - row.avg_x)**2 + (row.y - row.avg_y)**2),axis=1)
有人会有任何加快这个的建议吗?在这种情况下,是否有比使用申请更好的选择?
答案 0 :(得分:3)
您可以使用矢量化操作,而不是逐行计算。
试试这个:
import numpy as np
np.sqrt((df['x'] - df['avg_x'])**2 + (df['y'] - df['avg_y'])**2)
它比应用快得多(在1000行的数据帧上尝试过):
%timeit t = np.sqrt((df['x'] - df['avg_x'])**2 + (df['y'] - df['avg_y'])**2)
1000 loops, best of 3: 280 µs per loop
%timeit t = df.apply(lambda row: \
math.sqrt((row.x - row.avg_x)**2 + (row.y - row.avg_y)**2),axis=1)
10 loops, best of 3: 40.5 ms per loop