python - 返回字典列表中元素模糊匹配的键
问题描述
我有一个这样的数据框:
日期 | 成本类别 | 小贩 |
---|---|---|
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
推荐阅读
- r-plotly - 如何将 geom_point(aes()) + geom_vline(aes()) 转换为 Plotly?
- ios - 如何使用 Swift 5 从 URL 获取 HTML 代码
- ios - Firebase - 如何在创建新用户之前检查电话身份验证中是否存在电话号码
- python - 为什么在 python 中导入模块时出现“ModuleNotFoundError: No module named 'YEETER'”?
- c++ - 计算二维图像的垂直梯度会导致奇怪的输出
- excel - 为什么我在以下代码中不断收到“Else without If”错误?
- nexus - 我应该将哪种存储库格式与 Sonatype Nexus 一起用于非通用构建输出?
- c - CSFML顶点数组和绘图
- python - 返回字符串“hi”出现在给定字符串中任意位置的次数——Python codingbat问题
- angular - 组件构造函数中的依赖注入