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