我正在尝试改进我当前的代码,因为它效率不高。目前,我正在使用 iterrrows() 循环访问 DataFrame,并且我对每个文件都执行此操作,从而导致程序非常耗时。
for 循环查看 DataFrame 中的每一行(只有 2 列),如果在另一个 DataFrame 中找不到列“3”中的值,它将跳过该值,否则它会执行一些简单的计算。
下面是我希望改进的代码。它返回两个列表(BP_Shear 和 BP_Dis),然后绘制它们。
BP_Shear = []
BP_Dis = []
for index, Total_row in Total_Data.iterrows():
if not IT_Data[IT_Data['3'] == Total_row['3']].empty:
BP_Shear.append(Total_row['3'])
row_number = IT_Data[IT_Data['3'] == Total_row['3']].index
BP_Dis.append(Total_row['2'] - mean(IT_Data.iloc[row_number]["2"]))
我尝试过列表理解 - 实际上增加了 20 秒的代码时间。我目前正在尝试让矢量化工作,但运气不佳。
如果我正确理解你的问题,你可以跳过
itterows()
步骤并合并两个表。
import pandas as pd
import numpy as np
Total_Data = pd.DataFrame({'3':np.random.randint(0,20,10)}) # dummy data
IT_Data = pd.DataFrame({'3': np.linspace(0,5,6)})
data_needed = Total_Data.reset_index().merge(IT_Data, on = '3')
index
列将根据您的旧代码为您提供 row_number
。之后,您可以进行所需的计算。