【问题标题】:Matching certain columns in two dataframes to get a similarity score [closed]匹配两个数据框中的某些列以获得相似度分数
【发布时间】:2021-05-25 23:14:19
【问题描述】:

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

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

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

ZIP Street
1234 Flower Street 1
1234 Rose Street 2
1234 Dog Street 3
1234 Cat Street 4
1234 Mouse Street 5

数据框“B”:

ZIP Street
1234 Flowr Street 1
1234 Unique Street 2
1234 Dogg Ztreet 3
1234 Unique Street 4
1234 Mouz Str 5

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

ZIP Street Score
1234 Flowr Street 1 90%
1234 Unique Street 2 5%
1234 Dogg Ztreet 3 78%
1234 Unique Street 4 1%
1234 Mouz Str 5 84%

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

有人知道吗?

【问题讨论】:

    标签: python pandas dataframe machine-learning scoring


    【解决方案1】:

    您可以使用 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

    Levenshtein 比率为:0.631578947368421

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多