イントロダクション
データ分析において、複数のデータフレームを結合することは頻繁に行われます。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()関数を使用することで、複数のデータフレームを結合することができます。この記事では、基本的な使い方から異なる結合方法、キーの指定方法、サンプルコードを提示しました。あなたがコードを書く際に役立てられることを願っています。
コメント