【python初学者向け】Pandas DataFrameでキーを用いてデータを結合する方法(merge( )関数)を徹底図解

 
今回の記事では下記の悩みを解消します。
 

「Pandas DataFrameでキーを基にデータを結合する方法がわからない」
「Pandasのmerge( )関数でデータがどのように結合されているのかイメージできない」
「Pandasのmerge( )関数の使い方がわからない」

 
こんな悩みを解決していきます。
 

今回の記事では、Pandas DataFrameでキーを基にデータを結合する方法(merge関数)について解説していきます。
 

キーを用いず結合する場合(pandas concat( )関数の使い方)は下記記事参照

【python初学者向け】Pandas DataFrameでデータを結合する方法(concat関数)を徹底図解
今回の記事では下記の悩みを解消します。 「Pandas DataFrameでデータを結合する方法がわからない」 「Pandasのconcat関数の使い方がわからない」 こんな悩みを解決していきます。 今回の記事では、Pandas DataF...

 

pythonを活用したデータサイエンスでは、キーを用いてデータを結合することは頻出ですので、是非、今回の記事で理解してほしいです!

早速解説していきます。

 

Pandas merge( )関数の使い方

 
Pandasのmerge( )関数を使用することで、キーを用いてデータを結合できます。

文字列(str)、数値(int, float)、ブール値(True, False) など、さまざまなデータ型をキーとして使用できます。

結合の仕方は下記の4種類あり、それぞれ解説していきます。
 

・内部結合
・外部結合
・左結合
・右結合

 
今回はタイタニック予測問題データを使って解説していきます。データはkaggleのホームページからダウンロードできます。

Titanic - Machine Learning from Disaster
Start here! Predict survival on the Titanic and get familiar with ML basics

 
train.csvをdfとして読み込んで、下記のdf1とdf2を使って、キー(’PassengerId’列の値)を基に結合してみたいと思います。

df1とdf2は、’PassengerId’列の値「1, 2」が共通しており、「3, 4, 5」が共通していないです。

df1 = df[['Name','PassengerId']].iloc[[0,1,3], :].reset_index(drop = True)
df2 = df[['PassengerId', 'Fare','Sex']].iloc[[0,1,2,4], :].reset_index(drop = True)


 
まずは内部結合から解説していきます。
 

内部結合

 
内部結合は、共通のキーを持つ行だけを結合する方法で、共通のキーがない行は、結合結果には含まれません。

『how = ‘inner’』とすることで内部結合できます。
(merge( )関数はデフォルトで内部結合を実行するので、『how = 』の設定はしなくても問題ないです)

df1とdf2を内部結合すると、共通のキーがある行(’PassengerId’列の値が「1, 2」の行)が結合されます。df1とdf2で共通のキーがない行(’PassengerId’列の値が「3, 4, 5」の行)は結合後のデータには含まれません。
また、『on = ‘PassengerId’』で’PassengerId’列をキー列に設定しています。

pd.merge(df1, df2, on = 'PassengerId', how = 'inner')


 
続いて外部結合について解説していきます。
 

外部結合

 
外部結合は、両方のデータフレームに存在するすべてのキーを保持して結合します。

『how = ‘outer’』とすることで外部結合できます。

df1とdf2を外部結合すると、共通のキーがある行(’PassengerId’列の値が「1, 2」の行)が結合され、共通のキーがない行(’PassengerId’列の値が「3, 4, 5」の行)も保持されます。データがないところはNaN(欠損値)となります。

pd.merge(df1, df2, on = 'PassengerId', how = 'outer')


 
続いて左結合を解説していきます。
 

左結合

 
左結合は、左側のデータフレームのすべての行を保持しつつ、右側のデータフレームと共通するキーに基づいてデータを結合する方法です。右側のデータフレームに対応するキーが存在しない場合、その部分はNaNで補填されます。

『how = ‘left’』とすることで左結合できます。

df1とdf2を左結合すると、左(今回はdf1)のデータが全て残り、df2の共通のキーがある行(’PassengerId’列の値が「1, 2」の行)が結合されます。共通するキーがない箇所はNaNとなります。

pd.merge(df1, df2, on = 'PassengerId', how = 'left')


 
続いて右結合を解説していきます。
 

右結合

 
右結合は先ほどの左結合を右にしただけです。

『how = ‘right’』とすることで右結合できます。

df1とdf2を右結合すると、右(今回はdf2)のデータが全て残り、df1の共通のキーがある行(’PassengerId’列の値が「1, 2」の行)が結合されます。共通するキーがないデータはNaNとなります。

pd.merge(df1, df2, on = 'PassengerId', how = 'right')


 
次は結合するデータフレームでキー列の名称が異なる場合について解説していきます。
 

結合するデータフレームでキー列の名称が異なる場合

 
df1とdf2それぞれの’PassengerId’列の名称を’PassengerId1’、’PassengerId2’として内部結合してみます。

df1 = df1.rename(columns={'PassengerId': 'PassengerId1'})
df2 = df2.rename(columns={'PassengerId': 'PassengerId2'})

キー列の指定を「left_on」、「right_on」とすることで、キー列の名称が異なってもキー列を基に結合できます。
(内部結合以外でも、「left_on」、「right_on」とすれば結合できます)

pd.merge(df1, df2, left_on = 'PassengerId1', right_on = 'PassengerId2' ,how = 'inner')


 
最後に複数のキーを基に結合する場合を解説します。
 

複数のキーを基に結合する方法

 
下記のdf3とdf4を使って複数のキー(’Name’列、’Age’列の値)を基に結合してみます。

df3は0,4行目が同じ名前のデータがあり、’Name’列だけをキー列として結合する場合、この2個のデータを識別できませんが、’Name’と’Age’列の2個のキーを基に結合すれば、df3の0,4行目のデータを識別した上で結合できます。

df3 = df[['Embarked','Age','Name']].iloc[[6,9,10], :].reset_index(drop = True)
df3.loc[3] = ['C', 35,'McCarthy, Mr. Timothy J']
df4 = df[['Age','Name','Fare','Sex']].iloc[[6,7,10], :].reset_index(drop = True)

on = [‘Name’, ‘Age’]とすることで複数のキー(’Name’列、’Age’列の値)を基に結合できます。

df3には’Name’列に同じデータがありますが、’Name’列と’Age’列の2個のキーを基に結合することで、これら2個のデータを識別した上で結合できていることが確認できます。

pd.merge(df3, df4, on=['Name', 'Age'])


 
今回の記事はここまでです。
最後まで読んでいただきありがとうございました。
 
pythonを活用したデータサイエンスでは、データを結合するのは頻出なので、是非今回の記事で、Pandasのconcat関数の使い方をマスターしてください。
 
本記事が皆さんのお役に少しでも立てることを願っています。

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