2

FuzzyWuzzy ライブラリを使用してすべての結果をデータ フレーム列に格納するという課題に直面しています (ループが必要になるのではないかと思いますか?)あなたの誰かが解決策を手伝ってくれるかどうか見てください!とても参考になります!


私がやろうとしていることの例として、ここに 2 つのデータ フレーム テーブルがあります…</p>

マスターテーブル

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

ルックアップテーブル

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

基本的に、マスター テーブルの値のリスト全体に対してルックアップ テーブルの値を使用し、結果を 3 番目のテーブルに格納しようとしています。

これが私が最終的な出力をどのように見せたいかです...

+--------------+----------------------------+-------------------+
| 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 matchchoicesから dictを作成し、for ループを実行して結果をリストとして保存します。最後にリストを DataFrame に変換します。masterlookups

于 2016-06-17T23:25:06.570 に答える