どこで見かけたか忘れてしまった(TwitterかQiitaかその辺りのはず)のですが、
pandasのデータフレームのマージをする時に便利な引数を知ったので紹介します。
DataFrame同士を列の値で結合する時、pd.mergeを使います。
how=”inner”で利用する場合は何も問題ないのですが、
left/right/outerで使う場合、結果の中に、ちゃんと左右のデータフレームにレコードが存在してうまく結合できた行と、
一方にしか存在せず、結合はしなかった行が混在します。
left_on/right_on を使って結合した場合はそこの欠損を見ればまだ見分けられるのですが、
同名列をonで結合すると見分けがつかず、少し不便です。
このような時、 indicator=True を指定しておくと、 結果に _merge という列が追加され、
各レコードが左右のデータフレームのどちらに起因しているか出力してくれます。
やってみたのがこちらです。
import pandas as pd
df_0 = pd.DataFrame(
{
"id": range(5),
"key": [1, 5, 12, 7, 8],
"value0": ["a", "b", "c", "d", "e"],
}
)
df_1 = pd.DataFrame(
{
"key": range(10),
"value1": range(0, 100, 10),
}
)
df_merge = pd.merge(
df_0,
df_1,
on='key',
how="outer",
indicator=True,
)
print(df_merge)
"""
id key value0 value1 _merge
0 0.0 1 a 10.0 both
1 1.0 5 b 50.0 both
2 2.0 12 c NaN left_only
3 3.0 7 d 70.0 both
4 4.0 8 e 80.0 both
5 NaN 0 NaN 0.0 right_only
6 NaN 2 NaN 20.0 right_only
7 NaN 3 NaN 30.0 right_only
8 NaN 4 NaN 40.0 right_only
9 NaN 6 NaN 60.0 right_only
10 NaN 9 NaN 90.0 right_only
"""
both / left_only / right_only
で、 key の由来が確認できます。