Pandasのmergeについて徹底解説。結合方法を網羅的に解説。

イントロダクション

データ分析において、複数のデータフレームを結合することは頻繁に行われます。Pandasには、複数のデータフレームを結合するための便利な関数であるmerge()が用意されています。この記事では、Pandasのmerge()関数について、基本的な使い方から具体的な例までを解説します。

データフレームの前提知識

Pandasのデータフレームは、テーブル形式のデータを表現するためのクラスです。列ごとに異なる型を持つことができます。データフレームを操作するには、Pandasが提供するさまざまな関数を使用することができます。

以下は、Pandasでデータフレームを作成する例です。

import pandas as pd 

# サンプルデータフレーム1の作成 
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 
                    'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3']}) 

# サンプルデータフレーム2の作成 
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 
                    'C': ['C0', 'C1', 'C2', 'C3'], 
                    'D': ['D0', 'D1', 'D2', 'D3']}) 

merge()関数の使い方

merge()関数は、左側および右側のデータフレームと、それらを結合するためのキーを指定する方法を引数として取ります。以下は、基本的なmerge()関数の使い方です。

merged_df = pd.merge(left_df, right_df, on='key')

left_dfとright_dfは、それぞれ結合する左側と右側のデータフレームを表します。onキーワード引数は、結合に使用する列を指定します。

異なるデータフレームの結合方法

merge()関数には、内部結合、左外部結合、右外部結合、完全外部結合の4つの異なる結合方法があります。それぞれの結合方法について詳しく見ていきましょう。

内部結合

内部結合は、共通するキーがある行のみを結合する方法です。以下の例は、df1とdf2を内部結合する方法を示しています。

merged_inner = pd.merge(left=df1, right=df2, on='key')
print(merged_inner)

実行結果:

  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3

左外部結合

左外部結合は、左側のデータフレームの全ての行に対して右側のデータフレームを結合し、右側のデータフレームにマッチする行があればそれを加えます。右側のデータフレームにマッチする行がない場合は、新しい行を追加して欠落した値を埋めます。

以下の例は、df1とdf2を左外部結合する方法を示しています。

merged_left = pd.merge(left=df1, right=df2, how='left', on='key')
print(merged_left)

実行結果:

  key   A   B    C    D
0  K0  A0  B0   C0   D0
1  K1  A1  B1   C1   D1
2  K2  A2  B2   C2   D2
3  K3  A3  B3  NaN  NaN

右外部結合

右外部結合は、左外部結合と同様に、右側のデータフレームの全ての行に対して左側のデータフレームを結合し、左側のデータフレームにマッチする行があれば、それを加えます。左側のデータフレームにマッチする行がない場合は、新しい行を追加して欠落した値を埋めます。

以下の例は、df1とdf2を右外部結合する方法を示しています。

merged_right = pd.merge(left=df1, right=df2, how='right', on='key')
print(merged_right)

実行結果:

  key    A    B   C   D
0  K0   A0   B0  C0  D0
1  K1   A1   B1  C1  D1
2  K2   A2   B2  C2  D2
3  K3   A3   B3  C3  D3
4  K4  NaN  NaN  C4  D4

完全外部結合

完全外部結合は、左側と右側のデータフレームに全ての行を結合する方法です。左側にマッチする行がある場合は、それを右側に加えます。同様に、右側にマッチする行がある場合は、それを左側に加えます。左側と右側でマッチしなかった行については、欠落した値を含む行が作成されます。

以下の例は、df1とdf2を完全外部結合する方法を示しています。

merged_outer = pd.merge(left=df1, right=df2, how='outer', on='key')
print(merged_outer)

実行結果:

   key    A    B    C    D
0   K0   A0   B0   C0   D0
1   K1   A1   B1   C1   D1
2   K2   A2   B2   C2   D2
3   K3   A3   B3   C3   D3
4   K4  NaN  NaN   C4   D4

結合するキーの指定方法

データフレームを結合する際に、どの列をキーとして使用するか指定する必要があります。これはonキーワード引数で行います。複数の列をキーとして指定することもできます。

以下の例は、2つのデータフレームを複数共通するキーによって結合する方法を示しています。

merged_df = pd.merge(left=df1, right=df2, on=['key1', 'key2'])
print(merged_df)

データフレームのマージの例

最後に、実際のデータフレームのマージの例を示しましょう。

import pandas as pd 

# サンプルデータフレーム1の作成 
df1 = pd.DataFrame({'customer_id': [1001, 1002, 1003, 1004, 1005, 1006],
                    'region': ['West', 'South', 'North', 'East', 'West', 'South'],
                    'salary': [53000, 40000, 54000, 76000, 43000, 35000]}) 

# サンプルデータフレーム2の作成 
df2 = pd.DataFrame({'customer_id': [1002, 1004, 1006, 1008],
                    'age': [23, 31, 4, 25],
                    'gender': ['F', 'M', 'M', 'F']}) 

# 2つのデータフレームを結合する 
merged_df = pd.merge(left=df1, right=df2, on='customer_id', how='outer')

print(merged_df)

実行結果:

   customer_id region   salary   age gender
0         1001   West  53000.0   NaN    NaN
1         1002  South  40000.0  23.0      F
2         1003  North  54000.0   NaN    NaN
3         1004   East  76000.0  31.0      M
4         1005   West  43000.0   NaN    NaN
5         1006  South  35000.0   4.0      M
6         1008    NaN      NaN  25.0      F

インデックスを使ったマージ方法

merge()関数は、カラムだけでなく、インデックスを使ってもマージすることができます。レコードとレコードを結合し、重複するカラムはインデックスとして扱われます。

以下の例は、2つのデータフレームをインデックスを使って結合する方法を示しています。

import pandas as pd 

# サンプルデータフレーム1の作成 
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3']}, 
                    index=['K0', 'K1', 'K2', 'K3']) 

# サンプルデータフレーム2の作成 
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'], 
                    'D': ['D0', 'D1', 'D2', 'D3']}, 
                    index=['K0', 'K1', 'K2', 'K3']) 

# 2つのデータフレームをインデックスを使って結合する 
merged_index = df1.join(df2) 
print(merged_index)

実行結果:

     A   B   C   D
K0  A0  B0  C0  D0
K1  A1  B1  C1  D1
K2  A2  B2  C2  D2
K3  A3  B3  C3  D3

まとめ

Pandasのmerge()関数を使用することで、複数のデータフレームを結合することができます。この記事では、基本的な使い方から異なる結合方法、キーの指定方法、サンプルコードを提示しました。あなたがコードを書く際に役立てられることを願っています。

コメント

タイトルとURLをコピーしました