[英]Speed up iteration over DataFrame items
我寫了一個 function ,其中 DataFrame 的每個單元格除以另一個 dataframe 中保存的數字。
def calculate_dfA(df_t,xout):
df_A = df_t.copy()
vector_x = xout.T
for index_col, column in tqdm(df_A.iteritems()):
for index_row, row in df_A.iterrows():
df_A.iloc[index_row,index_col] = df_A.iloc[index_row,index_col]/vector_x.iloc[0,index_col]
return(df_A)
我應用計算的 DataFrame 的大小為 14839 行 x 14839 列。 根據tqdm
處理速度大約是 4.5s/it。 因此,計算將需要大約 50 天,這對我來說是不可行的。 有沒有辦法加快我的計算?
您需要矢量化您的部門:
result = df_A.values/vector_x
正如您似乎要求的那樣,這將沿行維度廣播並沿列維度划分。
與雙 for 循環相比,您正在利用 memory 中數據的連續性和同質性。 這允許大幅加速。
編輯:今天回到這個答案,我發現轉換為 numpy 數組首先會加快計算速度。 在本地,對於與上述問題中的數組類似的數組,我得到了 10 倍的加速。 已編輯我的答案。
我現在在移動設備上,但您應該盡量避免 python 中的每個 for 循環 - 總有更好的方法
我知道你可以將 pandas 列(系列)乘以一列以獲得所需的結果。 我認為將每一列與另一個 DataFrame 的匹配列相乘,您仍然需要迭代(但只有一個 for 循環 => 性能提升)
我強烈建議您暫時轉換為 numpy ndarray 並使用這些
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.