无需内存使用 python 即可高效快速地计算以下问题的方法

Efficient and Faster way to calculate the below problem without memory usage of python

我目前在一个项目中工作,我需要遍历数百万行并对每个循环进行计算。下面是代码,df1 是一个包含 40,000 行的数据框,df2 也是一个包含 60,000 行的数据框。

mycolumns = ['RowValue_df1','RowValue2_df1','RowValue_df2','RowValue2_df2']
combination = pd.DataFrame(columns=mycolumns)
custom_val = 50
for i in range(0,len(df1)):
    RowValue_df1 = df1["Column1"][i]
    RowValue2_df1 = df1["Column2"][i]

    for m in range(0,len(df2)):
        RowValue_df2 = df2["Column1"][m]
        RowValue2_df2 = df2["Column2"][m]
    
        calc_val = ((RowValue_df1/RowValue_df2) * (RowValue2_df2/RowValue_df1)) * 100 #just an example
    
        if calc_val <= custom_val:
            combination = combination.append(pd.Series([
                RowValue_df1,
                RowValue2_df1,
                RowValue_df2,
                RowValue2_df2,
                ],index = mycolumns),ignore_index=True)

它花了很多时间,我什至无法 运行 完全完成。有什么有效的方法可以改变上面的代码吗

可以应用两个更改来加速此代码:

  • combination.append 非常慢,因为它为每个新的附加行重新创建一个新的数据框。您可以 将行附加到 Python 列表 ,然后使用从结果列表创建最终数据框。使用列表应该会快得多。
  • 内部基于 m 的循环可以使用 Numpy向量化。您可以通过直接处理列而不是值来计算 calc_val,并且可以使用 Numpy 的 where 来过滤元素。