在Python的.apply()调用中使用lambda函数时,如何调用第二个函数?

在Python的.apply()调用中使用lambda函数时,如何调用第二个函数?,python,pandas,for-loop,lambda,Python,Pandas,For Loop,Lambda,我想知道如何将for循环转换为.apply方法。 我试图迭代数据帧df1的一列,并从第二个数据帧df2的子集返回匹配项。我有一个函数来进行匹配,还有一个函数从df2过滤器中选择正确的子集。我想知道是否可以使用apply方法调用这两个函数 我已经解决了如何作为for循环执行此操作,请参见下文,我似乎可以通过创建完整的函数first see来理解列表,但通过Pandas.apply方法和lambda表达式执行此操作时遇到了困难 ## Here is my Filter, which selects

我想知道如何将for循环转换为.apply方法。 我试图迭代数据帧df1的一列,并从第二个数据帧df2的子集返回匹配项。我有一个函数来进行匹配,还有一个函数从df2过滤器中选择正确的子集。我想知道是否可以使用apply方法调用这两个函数

我已经解决了如何作为for循环执行此操作,请参见下文,我似乎可以通过创建完整的函数first see来理解列表,但通过Pandas.apply方法和lambda表达式执行此操作时遇到了困难

## Here is my Filter, which selects titles from df2 for one year 
## either side of a target year
def Filter (year):
    years = [year-1, year, year+1]
    return df2[df2.year.isin(years)].title

# Here is my matching routine, it uses the process method from
# fuzzywuzzy
def Matcher(title, choices):
    title_match, percent_match, match3 = process.extractOne(title, 
choices, scorer=fuzz.token_sort_ratio)
    return title_match

# Here is my solution using a for-loop
for index, row in df1.iterrows():
    targets = Filter(row.year)
    df1.loc[index,'return_match'] = Matcher(row.title, targets)

# Here's my attempt with a lambda function
df1['new_col'] = df1.title.apply(lambda x: Matcher(x, 
Filter(df1.year)))
当我使用lambda函数时,出现的情况是Filter函数只在.apply方法的第一次迭代中被调用,因此每个标题都与第一个过滤集匹配。有办法解决吗?

欢迎来到SO JP。 我发现这方面存在一个问题:

下面是我对lambda函数的尝试 df1['new_col']=df1.title.applylambda x:Matcherx,Filterdf1.year 您在数据帧列的所有年份调用Filter,而作为for循环解决方案,您希望仅在该行的年份调用它。因此,我建议对以下行使用apply:

df1['new_col']=df1.applylambda行:Matcherrow.title,Filterrow.year,axis=1
我希望这会有帮助。

这非常有帮助,我使用了它,它完全有效。对不起,忘了谢谢你。