无需内存使用 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
来过滤元素。
我目前在一个项目中工作,我需要遍历数百万行并对每个循环进行计算。下面是代码,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
来过滤元素。