Python 加速数据帧项上的迭代

Python 加速数据帧项上的迭代,python,pandas,Python,Pandas,我编写了一个函数,其中一个数据帧的每个单元格被另一个数据帧中保存的数字除以 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.il

我编写了一个函数,其中一个数据帧的每个单元格被另一个数据帧中保存的数字除以

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)

我应用计算的数据帧的大小为14839行x14839列。根据
tqdm
处理速度约为4.5s/it。因此,计算大约需要50天,这对我来说是不可行的。有没有办法加快我的计算速度?

您需要将除法矢量化:

result=df_A.values/vector_x
正如您所要求的,这将沿行维度广播,并沿列维度分割

与双for循环相比,您利用了内存中数据的连续性和同质性。这允许大规模的加速


编辑:今天回到这个答案,我发现转换成numpy数组首先会加快计算速度。在本地,对于与上面问题中的数组大小相似的数组,我得到了10倍的加速比。已编辑我的答案。

您需要将您的部门矢量化:

result=df_A.values/vector_x
正如您所要求的,这将沿行维度广播,并沿列维度分割

与双for循环相比,您利用了内存中数据的连续性和同质性。这允许大规模的加速


编辑:今天回到这个答案,我发现转换成numpy数组首先会加快计算速度。在本地,对于与上面问题中的数组大小相似的数组,我得到了10倍的加速比。我已经编辑了我的答案。

我现在在移动设备上,但你应该尽量避免python中的每个for循环——总有更好的方法

首先,我知道你可以将一列(系列)乘以一列得到你想要的结果。 我认为,要将每一列与另一个数据帧的匹配列相乘,您仍然需要迭代(但仅使用一个for loop=>性能提升)


我强烈建议您暂时转换为numpy ndarray并使用这些

我现在在移动设备上,但您应该尽量避免python中的每个for循环-总有更好的方法

首先,我知道你可以将一列(系列)乘以一列得到你想要的结果。 我认为,要将每一列与另一个数据帧的匹配列相乘,您仍然需要迭代(但仅使用一个for loop=>性能提升)


我强烈建议您暂时转换为numpy ndarray并使用这些

向量的形状是什么?向量的形状是什么?太棒了!作品现在我得到了大约450秒/it:)。。总的来说,要执行的迭代次数要少得多!非常感谢。伟大的作品现在我得到了大约450秒/it:)。。总的来说,要执行的迭代次数要少得多!非常感谢。