merge関数では、2つのデータフレームを結合することができます。引数howの使い方についてまとめます。
この記事でわかること
・mergeの引数howの使い方がわかる
引数を下記表に一覧にします。crossについては、pandasバージョン1.2.0以降に追加された比較的新しい機能です。
引数 | 説明 |
inner(デフォルト) | 両方のデータフレームのキーがマッチする行のみを結合します。 |
left | 左のデータフレームのキーをすべて含み、右のデータフレームのキーがマッチするものだけを結合します。対応するキーが右のデータフレームに存在しない場合、結果はNaN となります。 |
right | 右のデータフレームのキーをすべて含み、左のデータフレームのキーがマッチするものだけを結合します。対応するキーが左のデータフレームに存在しない場合、結果はNaN となります。 |
outer | 両方のデータフレームのすべてのキーを含みます。マッチしないキーの値はNaN となります。マッチしないキーの値はNaN となります。 |
cross | 二つのデータフレームの間のカーテシアン積を計算します。それぞれの行が全ての組み合わせで結合されます。 |
引数cross以外の解説
まず、サンプルデータを作成します。
import pandas as pd
# 2つのサンプルデータフレームを作成
df1 = pd.DataFrame({
'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]
})
df2 = pd.DataFrame({
'key': ['C', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]
})
key value1
0 A 1
1 B 2
2 C 3
3 D 4
key value2
0 C 5
1 D 6
2 E 7
3 F 8
以下のコードで結合します。
# inner merge
print(pd.merge(df1, df2, on='key', how='inner'))
# left merge
print(pd.merge(df1, df2, on='key', how='left'))
# right merge
print(pd.merge(df1, df2, on='key', how='right'))
# outer merge
print(pd.merge(df1, df2, on='key', how='outer'))
key value1 value2
0 C 3 5
1 D 4 6
key value1 value2
0 A 1 NaN
1 B 2 NaN
2 C 3 5.0
3 D 4 6.0
key value1 value2
0 C 3.0 5
1 D 4.0 6
2 E NaN 7
3 F NaN 8
key value1 value2
0 A 1.0 NaN
1 B 2.0 NaN
2 C 3.0 5.0
3 D 4.0 6.0
4 E NaN 7.0
5 F NaN 8.0
引数crossの解説
この引数は、特に複数の異なるパラメータの組み合わせを試したい場合や、すべての組み合わせの結果を計算したい場合などに非常に便利です。
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
})
df2 = pd.DataFrame({
'B': ['B0', 'B1'],
})
# cross結合を使用してカーテシアン積を計算
result = pd.merge(df1, df2, how='cross')
print(result)
A B
0 A0 B0
1 A0 B1
2 A1 B0
3 A1 B1
4 A2 B0
5 A2 B1
以上、参考になれば幸いです。