[解決済み] Python Pandasでファジーマッチ・マージを行うことは可能ですか?
2022-12-26 18:13:52
質問
2つのDataFrameがあり、ある列に基づいてマージしたい。しかし、異なる綴り、異なるスペース数、発音区分符号の有無などの理由により、互いに類似している限りにおいて、マージできるようにしたいと思います。
どんな類似性アルゴリズムでも構いません(soundex、Levenshtein、difflib's)。
1つのDataFrameに以下のデータがあるとします。
df1 = DataFrame([[1],[2],[3],[4],[5]], index=['one','two','three','four','five'], columns=['number'])
number
one 1
two 2
three 3
four 4
five 5
df2 = DataFrame([['a'],['b'],['c'],['d'],['e']], index=['one','too','three','fours','five'], columns=['letter'])
letter
one a
too b
three c
fours d
five e
次に、結果のDataFrameを取得したい。
number letter
one 1 a
two 2 b
three 3 c
four 4 d
five 5 e
どのように解決するのですか?
locojay さんの提案と同様に
difflib
's
get_close_matches
から
df2
のインデックスに
join
:
In [23]: import difflib
In [24]: difflib.get_close_matches
Out[24]: <function difflib.get_close_matches>
In [25]: df2.index = df2.index.map(lambda x: difflib.get_close_matches(x, df1.index)[0])
In [26]: df2
Out[26]:
letter
one a
two b
three c
four d
five e
In [31]: df1.join(df2)
Out[31]:
number letter
one 1 a
two 2 b
three 3 c
four 4 d
five 5 e
.
もしこれらが列であったなら、同じように列に適用することができ、次に
merge
:
df1 = DataFrame([[1,'one'],[2,'two'],[3,'three'],[4,'four'],[5,'five']], columns=['number', 'name'])
df2 = DataFrame([['a','one'],['b','too'],['c','three'],['d','fours'],['e','five']], columns=['letter', 'name'])
df2['name'] = df2['name'].apply(lambda x: difflib.get_close_matches(x, df1['name'])[0])
df1.merge(df2)
関連
-
[解決済み] Python: pandasは複数のデータフレームをマージする
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み】PandasでSettingWithCopyWarningに対処する方法
-
[解決済み] Python Pandasは特定の列のみをマージする
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。