【问题标题】:Using rapidfuzz on a dataframe在数据帧上使用 rapidfuzz
【发布时间】:2022-01-15 00:15:09
【问题描述】:

我有 4 列,分别是 BuisnessID、Name、BuisnessID_y、Name_y,我想将 Name 与 Name_y 匹配,相似度得分为 90%,如果不是 90%,则删除这些行。样本输入

df

BusinessID      NAME        BusinessID_y  NAME_y

1013120869  MANOJ WANKHADE  1013404164    SLIMI
1013120869  MANOJ WANKHADE  1013831688    AMOL SHAHAKAR
1013120869  MANOJ WANKHADE  1013376009    PRATHMESH AGRAWAL
1013120869  MANOJ WANKHADE  1013376009    PRATHMESH AGRAWAL
1013120869  MANOJ WANKHADE  1013478922    AMBRISH PANDRIKAR

我是 python 新手,不知道该怎么做。另外,我有 50 万条记录,所以任何其他快速模糊的方法都会很棒

【问题讨论】:

  • 如果您提供您想要实现的快速模糊代码示例,我可以提供进一步的帮助。但简而言之,您需要 pandas 应用功能。 df['score'] = df[['NAME', 'NAME_y']].apply(... some function here...)
  • Rapid-fuzz 是一个库,尽管我愿意使用任何相似度得分比,因为我有大约 50 万条记录@KelvinDucray

标签: python pandas dataframe string-matching rapidfuzz


【解决方案1】:
>>> import pandas as pd
>>> import rapidfuzz
>>> df['matching_ratio'] = df.apply(lambda x:rapidfuzz.fuzz.ratio(x.NAME, x.NAME_y), axis=1).to_list()
>>> df

   BusinessID            NAME  BusinessID_y             NAME_y  matching_ratio
0  1013120869  MANOJ WANKHADE    1013404164              SLIMI       10.526316
1  1013120869  MANOJ WANKHADE    1013831688      AMOL SHAHAKAR       44.444444
2  1013120869  MANOJ WANKHADE    1013376009  PRATHMESH AGRAWAL       25.806452
3  1013120869  MANOJ WANKHADE    1013376009  PRATHMESH AGRAWAL       25.806452
4  1013120869  MANOJ WANKHADE    1013478922  AMBRISH PANDRIKAR       38.709677


>>> df[df.matching_ratio > 26] # change this '26' value to '90' as your requirmetn

   BusinessID            NAME  BusinessID_y             NAME_y  matching_ratio
1  1013120869  MANOJ WANKHADE    1013831688      AMOL SHAHAKAR       44.444444
4  1013120869  MANOJ WANKHADE    1013478922  AMBRISH PANDRIKAR       38.709677

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 2018-05-06
    • 2023-03-03
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多