Pandasデータフレームを結合!pandasでjoinを使った方法の徹底解説

はじめに

データ分析において、複数のデータフレームを結合して分析することは一般的な手法です。pandasライブラリのjoinメソッドを使えば、簡単にデータフレームを結合することができます。この記事では、pandasのjoinメソッドを使ったデータフレームの結合方法について解説します。

pandas joinの概要と使用シーン

pandasのjoinメソッドは、2つのデータフレームを指定の条件に従って結合するために用いられます。joinメソッドを使うことで、異なるデータフレームを1つにまとめることができます。

joinメソッドは、以下のような使用シーンがあります。

  • 複数のデータフレームを結合して1つのデータフレームにまとめる場合
  • データフレーム同士の関係性を表現するために使用する場合

joinの基本構文とデータフレーム結合の方法

joinメソッドの基本的な構文は以下の通りです。

merged_df = df1.join(df2, on='key')

ここで、df1とdf2は結合する2つのデータフレームであり、keyは結合のキーとなる列です。結合に使うキーが複数ある場合には、onにリスト形式で複数のキーを指定することができます。

具体的なデータフレームの結合方法について解説します。

1. inner Join

Inner Joinは、2つのデータフレームに共通するキーのみを基準に結合する方法です。

例えば、以下のような2つのデータフレームがあったとします。

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value2': [5, 6, 7, 8]})

df1とdf2をInner Joinするには、以下のように記述します。

inner_join = df1.set_index('key').join(df2.set_index('key'), on='key', how='inner')
print(inner_join)

出力結果:

  key   value1  value2
1   B        2       5
3   D        4       6

ここで、value_xはdf1のvalue列、value_yはdf2のvalue列です。Inner Joinでは、df1とdf2で共通するkeyのみが結合されています。

2. Outer Join

Outer Joinは、2つのデータフレームのすべての行を基準に結合する方法です。共通するキーがあれば結合されますが、ない場合には欠損値が入ります。

例えば、以下のような2つのデータフレームがあったとします。

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                     'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                     'value2': [5, 6, 7, 8]})

df1とdf2をOuter Joinするには、以下のように記述します。

outer_join = df1.join(df2.set_index('key'), on='key', how='outer')
print(outer_join)

出力結果:

  key   value1  value2
0   A      1.0     NaN
1   B      2.0     5.0
2   C      3.0     NaN
3   D      4.0     6.0
4   E      NaN     7.0
5   F      NaN     8.0

Outer Joinでは、df1とdf2のすべての行が結合されています。共通するキーがある場合には、その値が結合され、ない場合には欠損値が入ります。

3. Left Join

Left Joinは、df1を基準に結合し、df2のキーが存在する場合にはその値を結合し、存在しない場合には欠損値を入れます。

例えば、以下のような2つのデータフレームがあったとします。

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                     'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                     'value2': [5, 6, 7, 8]})

df1を基準にLeft Joinを行うには、以下のように記述します。

left_join = df1.join(df2.set_index('key'), on='key', how='left')
print(left_join)

出力結果:

  key   value1  value2
0   A        1     NaN
1   B        2     5.0
2   C        3     NaN
3   D        4     6.0

df1を基準にLeft Joinを行うと、df1のすべての行が結合され、df2のキーが存在する場合にはその値が結合されます。df2のキーが存在しない場合には欠損値が入ります。

4. Right Join

Right Joinは、df2を基準に結合し、df1のキーが存在する場合にはその値を結合し、存在しない場合には欠損値を入れます。

例えば、以下のような2つのデータフレームがあったとします。

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                     'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                     'value2': [5, 6, 7, 8]})

df2を基準にRight Joinを行うには、以下のように記述します。

right_join = df1.join(df2.set_index('key'), on='key', how='right')
print(right_join)

出力結果:

  key   value1  value2
0   B      2.0       5
1   D      4.0       6
2   E      NaN       7
3   F      NaN       8

df2を基準にRight Joinを行うと、df2のすべての行が結合され、df1のキーが存在する場合にはその値が結合されます。df1のキーが存在しない場合には欠損値が入ります。

実践例: pandas joinを使ったデータ分析のケーススタディ

ここでは、実際にpandasのjoinメソッドを使って、データ分析を行うケーススタディを紹介します。

例えば、以下のような2つのデータフレームがあったとします。

df1 = pd.DataFrame({'user_id': ['001', '002', '003', '004', '005'],
                     'age': [23, 32, 40, 28, 19]})
df2 = pd.DataFrame({'user_id': ['001', '002', '003', '004', '006'],
                     'gender': ['M', 'F', 'F', 'M', 'F']})

df1にはユーザーの年齢が、df2にはユーザーの性別が含まれています。この2つのデータフレームを結合し、年齢と性別を含む1つのデータフレームにまとめることを考えます。

df1とdf2をInner Joinするには、以下のように記述します。

merged_df = df1.join(df2.set_index('user_id'), on='user_id', how='inner')
print(merged_df)

出力結果:

  user_id  age gender
0     001   23      M
1     002   32      F
2     003   40      F
3     004   28      M

ここで、gender列が追加されていることが確認できます。

まとめ

この記事では、pandasのjoinメソッドを使ったデータフレームの結合方法について解説しました。Inner Join、Outer Join、Left Join、Right Joinのそれぞれの使い方を理解し、実際のデータ分析に応用することができるようになりました。

データ分析において、複数のデータフレームを結合して分析することは欠かせない手法です。pandasのjoinメソッドを使いこなし、正確かつスムーズなデータ分析を行いましょう。