表と表を結合させたいときがあると思います。
そのとき、Pythonではmerge()
関数を使用します。
今回は、merge()
関数で表を結合する方法を紹介します。
表の結合の種類
表の結合には4種類あります。
- 内部結合: Inner Join
- 外部結合: Outer Join
- 右結合: Right Join
- 左結合: Left Join
それぞれのイメージは以下です。
それではそれぞれの結合方法について詳しく説明します。
内部結合: Inner Join
内部結合は、共通のキーに対し、2つの表で一致する行が結合されます。
それ以外の行は、排除されます。
merge()
関数を使用し、内部結合する方法は以下の通りです。
df1.merge(df2, how='inner')
df1
:結合したDataFrameのひとつ目
df2
:結合したDataFrameのふたつ目
how
: inner
で内部結合を表す
それでは、具体的なコードを紹介します。
import pandas as pd
data1 = {
'Key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
}
data2 = {
'Key': ['K0', 'K1', 'K3'],
'C': ['C0', 'C1', 'C3'],
'D': ['D0', 'D1', 'D3'],
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
result = df1.merge(df2, how='inner')
print(result)
実行結果
共通のキー(Key)に対し、一致する行(K0, K1)が結合され、他が排除されています。
上記結果を図で表現すると以下のようになります。
外部結合: Outer Join
外部結合は、共通のキーに対し、一致する行と一致しない行も結合します。
merge()
関数を使用し、外部結合する方法は以下の通りです。
df1.merge(df2, how='outer')
df1
:結合したDataFrameのひとつ目
df2
:結合したDataFrameのふたつ目
how
: outer
で外部結合を表す
それでは、外部結合の具体的なコードを紹介します。
import pandas as pd
data1 = {
'Key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
}
data2 = {
'Key': ['K0', 'K1', 'K3'],
'C': ['C0', 'C1', 'C3'],
'D': ['D0', 'D1', 'D3'],
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
result = df1.merge(df2, how='outer')
print(result)
実行結果
共通のキー(key)に対し、一致する行(K0, K1)と一致しない行(K3, K4)が結合されています。
上記結果を図で表現すると以下のようになります。
右結合: Right Joinと左結合: Left Join
右結合は、右側の表のキーをベースに結合します。
右側の表のキーはすべて結合されます。
右側の表にしかなかったデータは欠損値(NaN)で埋められます。
一方、左結合は左側の表のキーをベースに結合します。
左側の表にしかなかったデータは欠損値(NaN)で埋められます。
merge()
関数を使用し、右結合および左結合する方法は以下の通りです。
df1.merge(df2, how='right')
df1.merge(df2, how='left')
df1
:結合したDataFrameのひとつ目(左側の表)
df2
:結合したDataFrameのふたつ目(右側の表)
how
: right
またはleft
で右結合、または左結合を表す
それでは、右結合および左結合の具体的なコードを紹介します。
import pandas as pd
data1 = {
'Key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
}
data2 = {
'Key': ['K0', 'K1', 'K3'],
'C': ['C0', 'C1', 'C3'],
'D': ['D0', 'D1', 'D3'],
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
result1 = df1.merge(df2, how='right')
result2 = df1.merge(df2, how='left')
print(result1)
print(result2)
実行結果
右結合
左結合
右結合は、右側の表のキー(K0, K1, K3)をベースに結合され、
左結合は、左側の表のキー(K0, K1, K2)をベースに結合されていることがわかります。
上記結果を図で表現すると以下のようになります。
まとめ
DataFrameを結合する方法を結合の種類と合わせて紹介しました。
それぞれの結合方法を実際に出力してみることで、
イメージがつきやすくなったと思います。
参考
おすすめ教材
米国データサイエンティストがやさしく教えるデータサイエンスのためのPython講座