首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列中的模糊匹配

列中的模糊匹配
EN

Stack Overflow用户
提问于 2019-04-04 21:54:27
回答 1查看 81关注 0票数 0

假设我有一个这样的运动列表:

代码语言:javascript
运行
复制
sports=["futball","fitbal","football","tennis","tenis","tenisse","footbal","zennis","ping-pong"]

我想创建一个数据框架来匹配运动的每个元素,如果模糊匹配优于0.5,那么它就是最接近的,如果它不是仅仅与它自己匹配。(我想使用函数fuzzywuzzy.fuzz.ratio(x,y)来实现)

结果应该如下所示:

代码语言:javascript
运行
复制
pd.DataFrame({"sport":sports,"closest_match":["futball","futball","football","tennis","tennis","tennis","futball","tennis","ping-pong"]})

    sport   closest_match
0   futball futball
1   fitbal  futball
2   football football
3   tennis  tennis
4   tenis   tennis
5   tenisse tennis
6   footbal futball
7   zennis  tennis
8   ping-pong ping-pong

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-04 22:29:35

这是一个使用itertools.combinations的解决方案

代码语言:javascript
运行
复制
from fuzzywuzzy import fuzz
import pandas as pd
sports = ["futball", "fitbal", "football", "tennis", "tenis", "tenisse", "footbal", "zennis", "ping-pong"]
dist = ([x for x in itertools.combinations(sports, 2) if fuzz.ratio(*x) > 50])

df = pd.DataFrame(dist, columns=["sport","closest"])
df['ratio'] = dist = ([fuzz.ratio(*x) for x in itertools.combinations(sports, 2) if fuzz.ratio(*x) > 50])
print(df)

df = df.groupby(['sport'])[['closest','ratio']].agg('max').reset_index()

输出:

代码语言:javascript
运行
复制
      sport   closest  ratio
0    fitbal  football     77
1  football   footbal     93
2   futball  football     80
3     tenis    zennis     83
4   tenisse    zennis     62
5    tennis    zennis     91
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55517732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档