匹配字符串相似度最高的两列中的字符串panda



我有两个数据帧:

import pandas as pd
df1 = pd.DataFrame({'Index': [1, 2, 3, 4, 5],
'name1': ['A brewery', 'B fresh produce', '100 wines', 'C canzirri ', 'D company']})
df2 = pd.DataFrame({'Index': [1, 2, 3, 4, 5, 6, 7],
'name2': ['bvb breweries', 'A brewerIES', 'BBBB fresh produce', '100 wines', 'f C canzirri ', 'Dcompany', 'b fresh produce']})

我想生成新的列df1.similar,对于每个df1.name1值,df1.similar是来自具有最高相似度的df2.name2的对应值。

CCD_ 5的相似度最高。

例如:

from difflib import SequenceMatcher
def similiarity_ratio(a, b):
return SequenceMatcher(None, a, b).ratio()
s=[]
for i in df2['name2']:
s.append(similiarity_ratio('A brewery',i))
max(s)

所需的输出将"A brewerIES"(在df2.name2中(设置为df1.similar,0.8设置为df1.ratio

我如何应用/lada来跨越df1.name1中的所有值?

嗨,我自己也试过。愚蠢但似乎还可以。

import pandas as pd
from difflib import SequenceMatcher

def compare(a):
compare={}
for i in df2['name2']:
compare.update({i: SequenceMatcher(None, a, i).ratio()})
item = max(compare, key=compare.get)
max_ratio = max(compare.values())
return pd.Series([item, max_ratio],
index=['matched name', 'highest_similarity ratio'])

df1[['matched name', 'highest_similarity ratio']] = df1['name1'].apply(lambda x: compare(x))
df1

但我刚刚了解到,如果使用difflib.get_close_matches,它会容易得多。

最新更新