【python】merge関数(引数how)を使った結合【pandas】

【python】merge関数(引数how)を使った結合【pandas】

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

以上、参考になれば幸いです。