[英]How can I speed up this dataframe?
我有兩個數據幀s
和sk
大約有1M
元素,我需要從中生成一個新的 dataframe df
:
df.iloc[i] = s.iloc[f(i)] / sk.iloc[g(i)]
其中f
和g
是返回整數的函數。
目前我正在做:
data = []
for i in range(s.shape[0])):
data.append(s.iloc[f(i)] / sk.iloc[g(i)])
df = pd.DataFrame(data, columns=s.columns)
但這似乎很慢。 大約需要 5 分鍾(數據框有 9 個float
列)。
只有10M
個分區,所以 5 分鍾似乎低於標准。 似乎所有的時間都花在迭代s
和sk
上,所以我想知道是否有辦法快速構建s[f]
和sk[g]
?
作為第一件事 - 限制在單次迭代中處理的零件數量 - 所以盡可能多地矢量化:
f_i = [f(i) for i in range(len(s))]
g_i = [g(i) for i in range (len(s))]
df = s.iloc[f_i] / sk.iloc[g_i]
第二件事 - 盡可能多地嘗試矢量化f_i
和g_i
的生成。
您尚未分享這些函數的示例,但其想法是基本上使其適用於numpy
,避免迭代處理。
import numpy as np
f_i = f(np.arange(len(s)))
g_i = g(np.arange(len(s)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.