簡體   English   中英

在一列中模糊匹配字符串,並使用Fuzzywuzzy創建新的數據框

[英]Fuzzy match strings in one column and create new dataframe using fuzzywuzzy

我有以下數據框:

df = pd.DataFrame(
    {'id': [1, 2, 3, 4, 5, 6], 
     'fruits': ['apple', 'apples', 'orange', 'apple tree', 'oranges', 'mango']
    })
   id      fruits
0   1       apple
1   2      apples
2   3      orange
3   4  apple tree
4   5     oranges
5   6       mango

我希望在列fruits找到模糊字符串,並按如下方式獲得一個新的數據框,其ratio_score高於80。

使用Fuzzywuzzy軟件包在Python中怎么做? 謝謝。 請注意, ratio_score是一系列構成示例的值。

我的解決方案:

df.loc[:,'fruits_copy'] = df['fruits']
df['ratio_score'] = df[['fruits', 'fruits_copy']].apply(lambda row: fuzz.ratio(row['fruits'], row['fruits_copy']), axis=1) 

預期結果:

     id      fruits    matched_id     matched_fruits   ratio_score   
0     1       apple        2                apples           95
1     1       apple        4            apple tree           85     
2     2      apples        4            apple tree           80   
3     3      orange        5               oranges           95     
4     6       mango         

參考相關:

使用python將匹配的列與自身模糊匹配

在數據框列上應用模糊匹配,並將結果保存到新列中

如何在python中的數組的列中模糊匹配項?

使用Fuzzywuzzy在數據框中創建一列匹配結果

我的參考下面的解決方案: 在數據框列上應用模糊匹配,並將結果保存在新列中

df.loc[:,'fruits_copy'] = df['fruits']

compare = pd.MultiIndex.from_product([df['fruits'],
                                      df['fruits_copy']]).to_series()

def metrics(tup):
    return pd.Series([fuzz.ratio(*tup),
                      fuzz.token_sort_ratio(*tup)],
                     ['ratio', 'token'])

compare.apply(metrics)

                       ratio  token
apple      apple         100    100
           apples         91     91
           orange         36     36
           apple tree     67     67
           oranges        33     33
           mango          20     20
apples     apple          91     91
           apples        100    100
           orange         33     33
           apple tree     62     62
           oranges        46     46
           mango          18     18
orange     apple          36     36
           apples         33     33
           orange        100    100
           apple tree     25     25
           oranges        92     92
           mango          55     55
apple tree apple          67     67
           apples         62     62
           orange         25     25
           apple tree    100    100
           oranges        24     24
           mango          13     13
oranges    apple          33     33
           apples         46     46
           orange         92     92
           apple tree     24     24
           oranges       100    100
           mango          50     50
mango      apple          20     20
           apples         18     18
           orange         55     55
           apple tree     13     13
           oranges        50     50
           mango         100    100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM