Pandas Dataframe,寻找加速使用数学的df.apply的方法

时间:2016-06-23 16:29:25

标签: python performance python-2.7 pandas dataframe

我正在使用拥有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)

有人会有任何加快这个的建议吗?在这种情况下,是否有比使用申请更好的选择?

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