【问题标题】:How Can I get this output using fuzzywuzzy?如何使用fuzzywuzzy 获得此输出?
【发布时间】:2020-12-15 07:38:44
【问题描述】:

如果我有两个数据框 (John,Alex,harry) 和 (ryan, kane, king)。如何在python中使用fuzzywuzzy来获得以下输出。

                              fuzz.Ratio  
John        ryan               25          
John        kane               54
John        king               44
alex        ryan               23
alex        kane               14
alex        king               55
harry       ryan               47
harry       kane               47
harry       king               50

【问题讨论】:

    标签: python python-3.x pandas fuzzywuzzy


    【解决方案1】:

    你的比率是错误的。您正在寻找的是两个数据框对应列的笛卡尔积。

    示例代码:

    import itertools
    
    df1 = pd.DataFrame({'name': ['John','Alex','harry']})
    df2 = pd.DataFrame({'name': ['ryan','kane','king']})
    
    for w1, w2 in  itertools.product(
        df1['name'].apply(str.lower).values, df2['name'].apply(str.lower).values):
      print (f"{w1}, {w2}, {fuzz.ratio(w1,w2)}")
    

    输出:

    john, ryan, 25
    john, kane, 25
    john, king, 25
    alex, ryan, 25
    alex, kane, 50
    alex, king, 0
    harry, ryan, 44
    harry, kane, 22
    harry, king, 0
    

    【讨论】:

    • w1 和 w2 是什么?如何将此输出存储在单个数据帧中?
    【解决方案2】:

    IIUC,你可以这样做:

    from fuzzywuzzy import fuzz
    from itertools import product
    import pandas as pd
    
    a = ('John','Alex','harry')
    b = ('ryan', 'kane', 'king')
    
    # compute the ratios for each pair
    res = ((ai, bi, fuzz.ratio(ai, bi)) for ai, bi in product(a, b))
    
    # create DataFrame filter out the values that are 0
    out = pd.DataFrame([e for e in res if e[2] > 0], columns=['name_a', 'name_b', 'fuzz_ratio'])
    
    print(out)
    

    输出

      name_a name_b  fuzz_ratio
    0   John   ryan          25
    1   John   kane          25
    2   John   king          25
    3   Alex   kane          25
    4  harry   ryan          44
    5  harry   kane          22
    

    【讨论】:

    • FuzzyWuzzy 中的 fuzz.ratiofuzz.partial_ratio 是不区分大小写的(它们甚至没有不区分大小写的版本)。默认情况下,所有其他算法都不区分大小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2016-02-11
    相关资源
    最近更新 更多