2

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


作为我正在尝试做的一个示例,这里有 2 个数据框表……</p>

主表

+----+-----------------+
| 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)

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

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

非常感谢您阅读我的内容!

4

1 回答 1

4

在 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

输出:

   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

基本上,我从for match 然后 for 循环创建一个choicesdict并将结果存储为一个列表。最后将列表转换为 DataFrame。masterlookups

于 2016-06-17T23:25:06.570 回答