簡體   English   中英

返回字典列表中元素模糊匹配的鍵

[英]Return key on fuzzy match of element in dictionary list

我有一個像這樣的 dataframe:

日期 成本類別 小販
2021-03-22 - 全家便利店
2021-03-04 - 家庭超市
2021-03-14 - 地鐵主線
2021-03-14 - 其他
2021-03-14 - 交通管理局
2021-03-09 - 地鐵本地
2021-03-24 - 7-11
2021-03-14 - 7-11

我想添加這樣的類別標簽:

日期 成本類別 小販
2021-03-22 店鋪 全家便利店
2021-03-04 店鋪 家庭超市
2021-03-14 用餐 地鐵主線
2021-03-14 - 其他
2021-03-14 - 交通管理局
2021-03-09 用餐 地鐵本地
2021-03-24 店鋪 7-11
2021-03-14 店鋪 7-11

我嘗試以下方法,它只會返回列表中匹配元素的值:

from fuzzywuzzy import process
from fuzzywuzzy import fuzz

Store = ['Family Mart', 'Seven Eleven', 'York Mart', 'Tokyu', 'Ministop']
Dining = ['Subway', 'Salad Works'] 

def fuzz_m(col, cat_list, score_t):
    tag, score = process.extractOne(col, cat_list, scorer = score_t)
    if score < 51:
        return ''
    else:
        return tag
    
df['Cost Category'] = df['Vendor'].apply(fuzz_m, cat_list = Store, score_t = fuzz.ratio)
日期 成本類別 小販
2021-03-22 全家超市 全家便利店
2021-03-04 全家超市 家庭超市
2021-03-14 - 地鐵主線
2021-03-14 - 其他
2021-03-14 - 交通管理局
2021-03-09 - 地鐵本地
2021-03-24 7-11 7-11
2021-03-14 7-11 7-11

我想要做的是使用字典代替 cat_list 並返回成本類別中的鍵。

dictionary = {'Store':['Family Mart', 'Seven Eleven', 'York Mart', 'Tokyu', 'Ministop'],
                  'Dining':['Subway', 'Salad Works']
                 } 

如果列中的任何值與列表中的元素匹配 51+,那么我想在成本類別下添加鍵。 如果是低匹配(低於 51),我什么也不想做。

是否有可行的方法來實現這一目標?

使用Series.apply()fuzz_m()一次接收一個Vendor值,因此您可以將該dictionary直接用作extractOne(value, dictionary)

def fuzz_m(value):
    _, score, tag = process.extractOne(value, dictionary)
    return tag if score > 50 else '-'

df['Cost Category'] = df['Vendor'].apply(fuzz_m)

#          Date  Cost Category             Vendor
# 0  2021-03-22          Store         FamilyMart
# 1  2021-03-04          Store        FAMILY MART
# 2  2021-03-14         Dining        Subway MAIN
# 3  2021-03-14              -              OTHER
# 4  2021-03-14              -  Transit Authority
# 5  2021-03-09         Dining       Subway local
# 6  2021-03-24          Store       Seven Eleven
# 7  2021-03-14          Store       Seven-Eleven

暫無
暫無

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

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