繁体   English   中英

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

[英]Pandas Dataframe, looking for way to speed up df.apply that uses math

我正在使用具有2900万行的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)

有人对加快速度有任何建议吗? 在这种情况下,有没有比应用申请更好的选择?

您可以使用向量化运算,而不用逐行计算。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM