はじめに
今まで存在を知らなかったのですが、めちゃめちゃ便利なのでメモ。
pandas の merge_asof関数について紹介します。
初投稿ですのでお手柔らかに。
基本的な例
import pandas as pd
df_left = pd.DataFrame({'a': [1, 5, 10], 'left_val': ['a', 'b', 'c']})
df_right = pd.DataFrame({'a': [1, 2, 3, 6, 7], 'right_val': [1, 2, 3, 6, 7]})
と2つのテーブルがあったとします。
このとき、
pd.merge_asof(df_left, df_right, on='a', direction='nearest')
と書くだけで、df_left のカラム['a'] に対し、df_right['a'] の最も近い値をキーとして、
2つのテーブルを結合することができます。
図のように、
- df_left['a'] = 1 に最も近い、df_right['a'] = 1の right_val を結合
- df_left['a'] = 5 に最も近い、df_right['a'] = 6の right_val を結合
- df_left['a'] = 10 に最も近い、df_right['a'] = 7の right_val を結合
していることが分かります。
許容する範囲の指定
"tolerance" という引数を使うことで、最も近い値をどこまで許容するか、
指定することができます。
import pandas as pd
pd.merge_asof(df_left, df_right, on='a', direction='nearest', tolerance=2)
参考
公式リファレンス:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge_asof.html