【问题标题】:fuzzywuzzy string match between 3 columns3列之间的fuzzywuzzy字符串匹配
【发布时间】:2018-07-23 20:00:30
【问题描述】:

所以我有一个看起来像这样的列。

name      col1            col2                      col3 
company1  Banking         Finance                   B&F
company2  Utilities       Utilities                 NaN
company3  Transportation  Pipeline Transportation   Utilities
company4  Consulting      Tech                      Insurance

有没有一种方法可以在 col1 、 col2 和 col3 之间进行模糊匹配,并为新列分配分数。我在熊猫中使用了fuzzywuzzy。

输出应该是这样的

name      col1            col2                      col3           Score 
company1  Banking         Finance                   B&F             23 
company2  Utilities       Utilities                 NaN             71
company3  Transportation  Pipeline Transportation   Utilities       54
company4  Consulting      Tech                      Insurance        2

(我只是为分数输入随机值,因此它们不准确) 我在这里找不到这样的问题,所以如果存在,请告诉我。

谢谢

【问题讨论】:

  • 谁能建议我如何仅在 2 列之间进行模糊匹配?我希望仅在同一行上跨列进行比较

标签: python pandas nltk fuzzywuzzy


【解决方案1】:

使用

df['score_1_2'] = df[['col1', 'col2']].apply(lambda row: fuzz.ratio(row['col1'], row['col2']), axis=1) 

如果您想计算第 1 列和第 2 列的分数。如果这对您有意义,您可以计算所有列对 1-2、2-3、1-3 的平均值。这取决于您要完成的工作...

【讨论】:

    【解决方案2】:

    我不知道您的用例是否对fuzzywuzzy 比率函数有意义,我看到的所有示例都使用两个字符串而不是三个字符串生成相似度分数(我自己没有使用过)。

    但假设它确实有意义,只需将分数分配给数据框中的新列,这是一些伪代码(您的数据框在此处称为 df):

    df['score'] = your_fuzzy_function(df['col1'], df['col2'], df['col3'])

    【讨论】:

    • 我将如何使用fuzzywuzzy 来比较2 列?我希望仅在同一行上跨列进行比较
    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2014-08-05
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多