Pandas DataFrames に読み込んだ 2 つの大きなデータ セットがあります (それぞれ ~ 20K 行と ~40K 行)。アドレス フィールドで pandas.merge を使用してこれら 2 つの DF を完全にマージしようとすると、行数に比べてわずかな数の一致が得られます。そこで、あいまい文字列の一致を試みて、出力一致の数が改善されるかどうかを確認しようと考えました。
DF1 [アドレスライン] に fuzzywuzzy extractone 関数を DF2 [アドレスライン] に適用した結果、DF1 (20K 行) に新しい列を作成することで、これに取り組みました。10億近くの比較を行うため、これには永遠に時間がかかることにすぐに気付きました。
これらのデータセットには両方とも「County」フィールドがあり、私の質問は次のとおりです。「county」フィールドが同じであることに基づいて、両方の DF の「addressline」フィールドで条件付きでファジー文字列一致を行う方法はありますか? 私はこの議論に出くわしました: Python を使用したビッグ データセットのファジー ロジック
ただし、郡に基づいてフィールドをグループ化/ブロックする方法については、まだあいまいです (しゃれは意図していません)。どんなアドバイスでも大歓迎です!
import pandas as pd
from fuzzywuzzy import process
def fuzzy_match(x, choices, scorer, cutoff):
return process.extractOne(x, choices = choices, scorer = scorer, score_cutoff= cutoff)[0]
test = pd.DataFrame({'Address1':['123 Cheese Way','234 Cookie Place','345 Pizza Drive','456 Pretzel Junction'],'ID':['X','U','X','Y']})
test2 = pd.DataFrame({'Address1':['123 chese wy','234 kookie Pl','345 Pizzza DR','456 Pretzel Junktion'],'ID':['X','U','X','Y']})
test['Address1'] = test['Address1'].apply(lambda x: x.lower())
test2['Address1'] = test2['Address1'].apply(lambda x: x.lower())
test['FuzzyAddress1'] = test['Address1'].apply(fuzzy_match, args = (test2['Address1'], fuzz.ratio, 80))
Excel にインポートされた 2 つの異なる DF のサンプル セットである 2 つの画像を追加しました。私の質問にとって重要ではないため、すべてのフィールドが含まれているわけではありません。最終目標を繰り返しますが、DF の 1 つに、2 番目の DF の住所行と他の住所行とのファジー マッチングの結果が上位にある新しい列が必要ですが、両方の DF 間で郡が一致する行のみが必要です。そこから、あいまい一致した住所と 2 番目の DF の住所行列の 2 つの DFS をマージする予定です。うまくいけば、これは紛らわしく聞こえません。