循环中“if not:”语句的向量化

问题描述 投票:0回答:1

我正在尝试改进我当前的代码,因为它效率不高。目前,我正在使用 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 秒的代码时间。我目前正在尝试让矢量化工作,但运气不佳。

python optimization vectorization
1个回答
0
投票

如果我正确理解你的问题,你可以跳过

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
。之后,您可以进行所需的计算。

© www.soinside.com 2019 - 2024. All rights reserved.