I 50,000一意の行及び20列の次パンダのデータフレーム(付属は、関連する列の抜粋である)を有する:は別のデータフレームにファジーマッチのための1つのPythonデータフレーム/辞書を検索
DF1:
PRODUCT_ID PRODUCT_DESCRIPTION
0 165985858958 "Fish Burger with Lettuce"
1 185965653252 "Chicken Salad with Dressing"
2 165958565556 "Pork and Honey Rissoles"
3 655262522233 "Cheese, Ham and Tomato Sandwich"
4 857485966653 "Coleslaw with Yoghurt Dressing"
5 524156285551 "Lemon and Raspberry Cheesecake"
Iも2列20,000一意の行いる(私はまた、辞書形式で保存されている)は、以下のデータフレームを有する:
DF2(またジとして保存しますct_2)私がやりたいと思っています何
PROD_ID PROD_DESCRIPTION
0 548576 "Fish Burger"
1 156956 "Chckn Salad w/Ranch Dressing"
2 257848 "Rissoles - Lamb & Rosemary"
3 298770 "Lemn C-cake"
4 651452 "Potato Salad with Bacon"
5 100256 "Cheese Cake - Lemon Raspberry Coulis"
はDF2に「PROD_DESCRIPTION」フィールドにDF1に「PRODUCT_DESCRIPTION」フィールドを比較して、重い物を持ち上げるの一部を支援するために最も一致/マッチを見つけることです。私は手動で一致をチェックする必要がありますが、それはずっと速くなります。理想的な結果は以下のようになります。 1つまたは複数の部分一致が記載されています:
PRODUCT_ID PRODUCT_DESCRIPTION PROD_ID PROD_DESCRIPTION
0 165985858958 "Fish Burger with Lettuce" 548576 "Fish Burger"
1 185965653252 "Chicken Salad with Dressing" 156956 "Chckn Salad w/Ranch Dressing"
2 165958565556 "Pork and Honey Rissoles" 257848 "Rissoles - Lamb & Rosemary"
3 655262522233 "Cheese, Ham and Tomato Sandwich" NaN NaN
4 857485966653 "Coleslaw with Yoghurt Dressing" NaN NaN
5 524156285551 "Lemon and Raspberry Cheesecake" 298770 "Lemn C-cake"
6 524156285551 "Lemon and Raspberry Cheesecake" 100256 "Cheese Cake - Lemon Raspberry Coulis"
私は既に完全一致を特定した結合を完了しました。各dfのProduct IDが一意であるため、インデックスが保持されることは重要ではありません。結果は、新しいデータフレームに保存することもできます。これは、約1400万行の第3のデータフレームに適用されます。
私は(とりわけ)以下の質問と回答を使用しました:
Is it possible to do fuzzy match merge with python pandas
Fuzzy merge match with duplicatesはしようとクラゲモジュールを含む
Python fuzzy matching fuzzywuzzy keep only the best match
Fuzzy match items in a column of an array
も様々な回答の1で提案されているようにループ/関数/マッピングなどであるが、スコアが低い、またはマッチが検出されない最初の「ファジー一致」を得るか、またはいずれも成功しなかった。
hereとして一致/距離スコアの列が生成されるというアイデアが好きです。これは手動確認プロセスのスピードアップを可能にします。
私はPython 2.7、pandasを使用しており、fuzzywuzzyがインストールされています。
私はデータの小さなサブセットでこれを使ってきたし、それがうまく機能しているように見えることを確認します。私はちょうど4つの異なる反復で大きなブロックを実行して、さまざまなファズの使用法(つまりfuzz.ratio、fuzz.partial_ratioなど)をテストするように設定しました。私の論文を重く持ち上げて助けてくれてありがとう。 – gincard
追加するだけで - fuzz.token_sort_ratioが約70%の成功した試合で最も正確な結果を出しました。 – gincard
@ gincardどのくらいのデータとどのくらいの速さでしたか...約 – piRSquared