Python pandas:通过正则表达式从其他数据帧过滤一个非常大的数据帧

Python pandas:通过正则表达式从其他数据帧过滤一个非常大的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个巨大的csv(df1),几乎有300万行,其他csv(df2),有15k行。 我想从df1中得到满足df2中提到的条件的行 写了一些东西,但需要很长时间才能完成 守则的结果: 代码会将“原因”列附加到df1,并在df2中满足条件 及 它将df1的索引附加到df2的条件 请帮我缩短执行时间 改变算法以达到速度也是受欢迎的 例: def豁免(行,df): 温度=(df.invalization

我有一个巨大的csv(df1),几乎有300万行,其他csv(df2),有15k行。 我想从df1中得到满足df2中提到的条件的行 写了一些东西,但需要很长时间才能完成 守则的结果:

代码会将“原因”列附加到df1,并在df2中满足条件 及 它将df1的索引附加到df2的条件

请帮我缩短执行时间 改变算法以达到速度也是受欢迎的 例:

def豁免(行,df):
温度=(df.invalization
谢谢,
Krism

您的代码似乎没有提供您所期望的内容。运行它之后,我得到了
df1['Reason']='sure'
where
Pin=='aaa'
。Hi@QuangHoang,:)Pin=='aaa'满足[5,“a+”,“Im”]&[2,'.*,“sure”]的条件,最近的“Reason”将分配给df1[“Reason”]
def waived(row,df) :
    temp = (df.Violation < float(row["Limit"]))  & (df.Pin.str.contains(row["Pin"]))
    if temp.any() : 
        df.loc[temp,"Reason"] = row["Reason"]
        return df[temp].index.tolist()

df1 = pd.DataFrame({'Violation': [0.5,1,2,3,4,5,6],'Pin':"kkk","aaa","bbb","ccc","abc","xyz","abcdef"]},index=[0, 1,2,3,4,5,6])
df2 = pd.DataFrame({'Limit': [5,3,2],'Pin': ["a+","bb*",".*"],"Reason":["Im","not","sure"]},index=[0, 1,2])
df2["Indexes"] = df2.apply(lambda row : waived(row,df1),axis=1)