我有一个数据框,其中包含一列字符串和一个我需要匹配的主列表。我希望将此匹配作为单独的列添加到数据框中。由于数据帧大约是100万行,我想首先做“字符串包含”,如果它不包含主列表中的字符串,我想在阈值85处模糊匹配它们,那么如果仍然没有匹配,只返回数据框列中的值。
m_list = [FOO,BAR,DOG]
df
Name Number_Purchased
ALL FOO 1
ALL FOO 4
BARKY 2
L.T. D.OG 1
PUMPKINS 3
我正在努力实现这一结果:
df2
Name Number_Purchased Match_Name Match_Score
ALL FOO 1 FOO 100
ALL FOO 4 FOO 100
BARKY 2 BAR 95
L.T. D.OG 1 DOG 90
PUMPKINS 3 PUMKINS 25
我的代码如下所示:
def matches(df, m_list):
if df['Name'].contains('|'.join(m_list)):
return m_list, 100
else:
new_name, score = process.extractOne(df.name, m_list, scorer = fuzz.token_set_ratio)
if score > 85:
return new_name, score
else:
return name, score
df['Match_Name'], df['Match_Score'] = zip(*df.apply(matches))
我已经多次编辑并且一直有错误“str”不包含属性“str”,或者导致问题的数组形状存在差异。如何调整此代码以使其具有功能,但也可以扩展到具有100万行的列?