使用 fuzzywuzzy 在数据框中创建一列匹配结果

2023-12-08

我遇到了使用 FuzzyWuzzy 库将所有​​结果存储在数据框列中的挑战(我猜它可能需要循环?)我一整天都在摸索这个问题,现在我想看看你们谁能帮我解决问题!会超级有帮助的!


作为我想做的一个例子,这里有 2 个数据框表......

主表

+----+-----------------+
| ID |      ITEM       |
+----+-----------------+
|    |                 |
| 1  | Pepperoni Pizza |
|    |                 |
| 2  | Cheese Pizza    |
|    |                 |
| 3  | Chicken Salad   |
|    |                 |
| 4  | Plain Salad     |
+----+-----------------+

查找表

+--------------+---+
| LOOKUP VALUE | - |
+--------------+---+
|              |   |
| Cheese       | - |
|              |   |
| Salad        | - |
+--------------+---+

本质上,我试图针对主表中的整个值列表使用查找表的值,并将结果存储在第三个表中。

这就是我想要的最终输出的样子......

+--------------+----------------------------+-------------------+
| LOOKUP VALUE |       MATCHED VALUES       | MATCHED VALUE IDS |
+--------------+----------------------------+-------------------+
|              |                            |                   |
| Cheese       | Cheese Pizza               | 2                 |
|              |                            |                   |
| Salad        | Chicken Salad, Plain Salad | 3,4               |
+--------------+----------------------------+-------------------+

我了解 Fuzzy Wuzzy 的基础知识,我是这样开始的:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

choices = ["Pepperoni Pizza","Cheese Pizza","Chicken Salad", "Plain Salad"]
process.extract("salad",choices,limit=2)

Output= [('鸡肉沙拉', 90), ('原味沙拉', 90)]

很好,但是如何以系统的方式做到这一点,针对主表中的所有值运行我的所有查找值?

非常感谢您阅读我的文章!


将列表存储在 DataFrame 中不是一个好主意,我建议将每个匹配项存储为 DataFrame 中的一行。这是代码:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

import pandas as pd
import io

master = pd.read_csv(io.StringIO("""ID,ITEM
1,Pepperoni Pizza
2,Cheese Pizza
3,Chicken Salad
4,Plain Salad"""))

lookups = ["Cheese", "Salad"]

choices = master.set_index("ID").ITEM.to_dict()

res = [(lookup,) + item for lookup in lookups for item in process.extract(lookup, choices,limit=2)]
df = pd.DataFrame(res, columns=["lookup", "matched", "score", "id"])
df

output:

   lookup        matched  score  id
0  Cheese   Cheese Pizza     90   2
1  Cheese  Chicken Salad     45   3
2   Salad  Chicken Salad     90   3
3   Salad    Plain Salad     90   4

基本上,我创建了一个choices听写自masterfor 匹配,然后 for 循环lookups并将结果存储为列表。最后将列表转换为DataFrame。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 fuzzywuzzy 在数据框中创建一列匹配结果 的相关文章

随机推荐

  • 无需 JavaScript 即可轻松实现等高 DIV?

    到目前为止 我主要使用基于表格的布局 但由于它被认为是过去的事情 所以现在我承担了学习基于 DIV 的布局的任务 到目前为止 对我来说最烦人的挑战之一是找到一种方法来获得等高的 DIV 该 DIV 可以在所有主要浏览器上运行 不依赖于 Ja
  • 错误 C2679:二进制 '<<':找不到采用 'std::string' 类型的右侧操作数的运算符(或者没有可接受的转换)

    这是我的代码 如何修复这个错误 include stdafx h include
  • 如何检测 Highcharts 图表中点的双击或长按?

    Highcharts 提供了检测图表点点击的机会 但是有可能吗 检测其他事件 例如双击或鼠标按下事件 提前致谢 每个组件只支持某些事件 例如图表组件会检测addSeries click load redraw and selection 我
  • 索引枚举的值,而不是字符串

    是否可以使用 Solrnet 索引 Enum 的值而不是其字符串表示形式 假设我必须遵循以下枚举 Serializable Flags public enum Gender Male 0 Female 1 并将 solr 属性添加到Gend
  • 使用react-router-v4对路由进行身份验证

    我正在尝试写Authentication检查我的DashBoard 但函数本身没有被调用 谁能给我一些解决方案吗 我正在使用 ReactJs 进行开发 这是路线部分
  • 我收到错误“DELETE 语句与 REFERENCE 约束冲突”

    我尝试用外键截断表并收到消息 无法截断表 因为它被 FOREIGN KEY 约束引用 我阅读了很多有关该问题的文献 并认为我通过使用删除找到了解决方案 DELETE FROM table name DBCC CHECKIDENT table
  • 没有 Boost.Serialization 的序列化

    我正在尝试为我的代码实现一个简单的序列化 反序列化方法 以便能够使用 MPI 通过网络传递对象 在理想的世界中我会使用Boost Serialization and Boost MPI为此 但它们没有安装在我有权访问的某些集群上 因此我正在
  • 需要 Microsoft Visual C++ 10.0(无法找到 vcvarsall.bat)

    我尝试使用以下命令在 Windows 8 1 上安装 ephem 模块 pip install ephem 但我收到此错误 Microsoft Visual C 10 0 is required Unable to find vcvarsa
  • Knockout JS 映射插件混乱

    我很困惑在使用映射插件时应该何时何地声明我的 viewModel 这是我的 json 文件 members memberid 001 membername Jason memberid 002 membername Bob 这是 html
  • 如何使用 hibernate 和 Legacy 数据库修剪 char 字段 pojo 中的空格

    我的表的列为 char 5 无法将其更改为 varchar 5 因此 当我使用 hibernateTemplate 从表中获取值时 它会返回带有实际的单个字母值的添加空格 客户修复是使用 trim 方法检查 NPE 但是我们是否有提供的方法
  • SQL 迭代所有表

    我正在运行以下代码以从具有特定列的所有表中提取所有相关行 外层IF应该检查该迭代的表中是否存在该列 如果没有 它应该完成该迭代并移至下一个表 如果表中有GCRecord列 然后应该检查该表是否会返回任何记录 如果没有要返回的记录 则应结束该
  • data.table 中 cumsum 的平均版本(累积平均值)

    我有一些数据 library data table set seed 42 dat lt data table t 1 6 group rep 1 2 each 3 val runif 6 0 1 gt dat t group val 1
  • 如何在c中打印内存位

    我正在学习数字在内存中的表示方式 我想知道如何在内存中打印某些 int 和 float 变量的实际表示形式 二进制或十六进制 例如 我想看看当添加或减去这些数字导致溢出时会发生什么情况 如何访问内存并打印它 您需要将指向相关变量的指针分配给
  • Java 在文本区域右侧显示文本

    我遇到的问题ComponentOrientation RIGHT TO LEFT是 或 等字符或者 显示在左侧 我只需要从右到左绘制文本 但使用标准 西方 英语从左到右的文本字符表示法 如果不手动渲染文本 这可能吗 我无法生成您的问题 您可
  • 将 Jackson 注释添加到 swagger 生成的类

    我正在使用 swagger 来定义与我的网络服务器的合同 在 swagger 文件中 我定义了 REST 端点和请求 响应对象 我想添加注释 JsonInclude Include NON NULL 到我的招摇班级的一个领域 swagger
  • 动态包含安全

    有没有什么方法可以安全地包含页面而不将它们全部放入数组中 if preg match a z0 9 GET page page GET page php tpl GET page html if file exists page inclu
  • 如何使用 AJAX 进行重定向?

    我有以下代码 function get login hideshow loading2 1 error 0 ajax type POST url The URL data logins serialize dataType json suc
  • 即使用户强制关闭服务,如何自动重新启动服务?

    我希望服务在我的应用程序中始终运行 所以我想重新启动它 即使它被用户强制关闭 肯定有办法做到这一点 就像 Facebook 等应用程序正在做的那样 这不是使用推送通知完成的 即使互联网关闭 Facebook 也会重新启动其服务 首先 它是真
  • 绘制靠近折线的线

    我有一个三角形作为折线 我想绘制一个高度 我发出命令 line or line 正确的点 但 AutoCAD 绘制从顶点到相邻顶点的线 不仅在 AutoLISP 中 AutoCAD 也不允许我在多段线中绘制从顶点到边的中间的线 我怎样才能做
  • 使用 fuzzywuzzy 在数据框中创建一列匹配结果

    我遇到了使用 FuzzyWuzzy 库将所有 结果存储在数据框列中的挑战 我猜它可能需要循环 我一整天都在摸索这个问题 现在我想看看你们谁能帮我解决问题 会超级有帮助的 作为我想做的一个例子 这里有 2 个数据框表 主表 ID ITEM 1