[英]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.