Python 应用双lambda函数的性能问题
我有两个数据帧:df1、df2,每个数据帧都包含一个带名称的列。我将df1中的每个名称与df2中的每个名称进行比较。 这必须是近似匹配。Iam使用模糊标记排序比率来获得比较分数 然而,这种方法非常慢,而且df2一直在增长,它已经需要半个多小时(4k x 2k行)。 有没有办法加快这个过程 我目前的执行情况:Python 应用双lambda函数的性能问题,python,pandas,performance,loops,lambda,Python,Pandas,Performance,Loops,Lambda,我有两个数据帧:df1、df2,每个数据帧都包含一个带名称的列。我将df1中的每个名称与df2中的每个名称进行比较。 这必须是近似匹配。Iam使用模糊标记排序比率来获得比较分数 然而,这种方法非常慢,而且df2一直在增长,它已经需要半个多小时(4k x 2k行)。 有没有办法加快这个过程 我目前的执行情况: def match(df2,name): df2['score'] = df2['name'].map(lambda x: fuzz.token_sort_ratio(x, name
def match(df2,name):
df2['score'] = df2['name'].map(lambda x: fuzz.token_sort_ratio(x, name))
return df2.loc[(df2['score'].idxmax())
df1['result']=df1['name'].map(lambda x: match(df2,x))
你可以试试这个
从fuzzyfuzzy导入fuzz
def相似性(名称1、名称2):
返回fuzz.token\u sort\u比率(name1,name2)
df1['key']=1
df2['key']=1
merged=df1.merge(df2,on='key')
合并['name_score']=合并['name_x','name_y']]\
.apply(lambda行:相似性(行['name\u x'],行['name\u y']),轴=1)
或者
从fuzzyfuzzy导入fuzz
def相似性(名称1、名称2):
返回fuzz.token\u sort\u比率(name1,name2)
df1['key']=1
df2['key']=1
merged=df1.merge(df2,on='key')
分数=列表(地图(相似性,合并['name\u x'],合并['name\u y']))
合并['name_score']=分数