我有两个数据框如下:DF1:
Name Value
buying fish hook 240
arrange lunch 75
repair equipment 800
purchase air condition 1400
buying fish 66
DF 2:
Name
fish
lunch
equipemt
air condition
hair condition
fish hook
我想匹配数据框和模糊逻辑的名称列中的名称,并将第二个数据框中的名称列添加到第一个:
Name Value item
buying fish hook 240 fish hook
arrange lunch 75 lunch
repair equipment 800 equipment
purchase air condition 1400 air condition
并非所有名字都完全匹配。 Df 2有几个名字,有些还有匹配的单词ex:air condition和hair condition。来自DF 1的分裂值导致错配,其中鱼钩仅与鱼匹配
您可以将pd.Series.apply
与next
和生成器表达式一起使用。在多次匹配的情况下,此方法将优先考虑df2
中的行顺序。如果没有找到匹配,find_key
将返回None
。
def find_key(x):
return next((i for i in df2['Name'].values if x in i), None)
df1['item'] = df1['Name'].apply(find_key)
from fuzzywuzzy import process
i = 0
scorethreshold = 70
df1["fuzzy"] = 0
for x in df1.Name:
noun,score,record = process.extractOne(x,df2.Name)
if score > scorethreshold:
df1.loc[i,'fuzzy'] = noun
else:
df1.loc[i,'fuzzy'] = None
i = i + 1
此代码将比较和匹配文本。根据scorethreshold返回df2值或None。您可以根据df2的精度修改阈值。您可能还想进行一些文本处理以获得更好的结果。