我有两个数据框,如下所示: DF1:
$('#' + myID).contents().appendTo('#popupWrapper');
DF 2:
Name Value
buying fish hook 240
arrange lunch 75
repair equipment 800
purchase air condition 1400
buying fish 66
我想用模糊逻辑将两个数据框的名称列中的名称匹配,并将第二个数据框的名称列添加至第一个:
Name
fish
lunch
equipemt
air condition
hair condition
fish hook
并非所有名称都完全匹配。 Df 2有几个名称,有些具有匹配的词,例如:air condition和hair condition。从DF 1拆分值会导致未命中,其中鱼钩仅与鱼匹配
答案 0 :(得分:0)
您可以将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)
答案 1 :(得分:0)
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
此代码将比较并匹配文本。根据得分阈值返回df2值或无。您可以根据df2的精度修改阈值。您可能还需要进行一些文本处理以获得更好的结果。