匹配两个数据框中的某些列以获得相似度分数

问题描述

我有一个包含 100 万条记录“A”的数据框和一个包含 1000 条记录“B”的较小数据框,我想将其添加到数据框“A”中。

这里有一个问题:某些记录可能已经在表 'A' 中,名称略有不同,我不想添加重复项。因此,我们的想法是为数据框“B”的记录提出一个相似性分数,这样我就可以得出一个截止值,留下一个干净的数据框“B”来添加到数据框“A”中。

例如:数据框“A”包含一百万条街道名称记录。

邮编 街道
1234 花街1
1234 玫瑰街2
1234 狗街 3
1234 猫街 4
1234 老鼠街5

数据框“B”:

邮编 街道
1234 花街1
1234 独特的街道2
1234 Dogg Ztreet 3
1234 Unique Street 4
1234 Mouz Str 5

我想象决赛桌看起来像这样,例如,我会在稍后删除得分 >75% 的记录。

邮编 街道 得分
1234 花街1 90%
1234 独特的街道2 5%
1234 Dogg Ztreet 3 78%
1234 Unique Street 4 1%
1234 Mouz Str 5 84%

现在,在考虑创建某个分数之前,我一直在思考如何仅从较小的数据帧“B”中选择一条记录,以将其与“A”的整个数据帧进行比较。

有人知道吗?

解决方法

您可以使用 Levenshtein 算法来比较两个字符串的相似度。我认为为您比较的每条记录提供一个截止点对您来说可能会很有效。

https://pypi.org/project/python-Levenshtein/

示例代码如下:- https://github.com/iainonline/levexample.git

import Levenshtein as lev

a = 'compare this'
b = 'to this'

Distance = lev.distance(a.lower(),b.lower())
Ratio = lev.ratio(a.lower(),b.lower())

print('Levenshtein distance is: ',Distance)
print('Levenshtein ratio is: ',Ratio)

输出将是:

Levenshtein 距离为:6

莱文斯坦比率为:0.631578947368421