簡體   English   中英

加速 DataFrame 項目的迭代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM