3
我有一個熊貓數據框與約。 250,000行。我想創建一個新的領域如下:Python熊貓:平庸應用報表令人難以置信的慢
df['new_field'] = df.apply(lambda x: x.field2 if x.field1 > 0 else 0, axis =1)
這個工作,但上面的一行大約需要15秒的跑!
優化,我是這樣:
@numba.jit(nopython=True)
def mycalc(field1, field2, out):
for i in xrange(field1.size):
if field1[i] > 0:
out[i] = field2[i]
else:
out[i] = 0
return out
df['new_field'] = mycalc(df.field1.as_matrix(), df.field2.as_matrix(), np.zeros(df.field1.size))
,現在需要0.25秒。
我的問題是:有沒有更好的方法來做到這一點?
numba解決方案的時機很好,但整個方法看起來很古怪:我本來希望計算一個平庸可以在一條線上有效地完成。另外,在nopython模式下,我需要初始化numba之外的輸出數組,並將它傳遞給numba,因爲我知道numba無法在nopython模式下創建新數組。
一些數據來自SQL,我使用熊貓的次數越多,看起來越多,我最好在SQL中儘可能多地做,因爲速度差異是瘋狂的。現在,當然我很欣賞SQL在處理GB數據時會更快,但是對於250k行的平凡計算需要15秒纔會過多。
謝謝!
謝謝!對於更復雜的情況,矢量化如果不是不可能的話更難,你會推薦numba還是別的? –
也許,總是善於分析,看看有什麼值得做的 – EdChum