2016-06-23 3 views
0

29M行のPandas Dataframeを使用しています。私はすべての浮動小数点数である4つの列に基づいて計算を実行しています。Pandas 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

関連する問題