繁体   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