2016-06-23 69 views
0

我正在使用具有29M行的Pandas Dataframe。我正在做一個基於四列的計算,這四列都是浮點數。熊貓Dataframe,尋找加快使用數學的df.apply的方法

此調用正在超過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) 

會有人對加速這件事有什麼建議?在這種情況下,有沒有比使用申請更好的選擇?

回答

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 
+0

這做到了!非常感謝! –

+0

不客氣。 :) – ayhan