Python

Python:結合の再確認

スポンサーリンク

はじめに

データ分析をしていると、複数のテーブルを結合して作業することがありますよね。今回は、pandasのデータフレームでテーブルデータを扱っているときに、直面する「結合」について扱います。

pandasライブラリのmergeについて確認していきましょう。mergeには、結合の仕方として、「inner」「outer」「left」「right」があります。これらを説明する前に、まずはデータを準備していきます。

データの準備

df1=pd.DataFrame({'key':[0,0,1,2],
                 'value':['A','B','C','D']})
df2=pd.DataFrame({'key':[0,1,3],
                 'value':['X','Y','Z']})

これで2つのテーブルデータの準備が整いました。次は、これらのテーブルを使っていろんな結合を試していきましょう。

結合の種類

結合の種類は大きく、「内部結合」と「外部結合」があります。

「内部結合」は、2つテーブル間で指定したKeyが共通するものだけを抽出する結合です。

一方、「外部結合」は、指定したKey列に共通のものがない行も残す結合方法となります。「外部結合」はさらに、「左外部結合」と「右外部結合」があります。

 「左外部結合」:左側のデータはすべて残すようにした結合
 「右外部結合」:右側のデータはすべて残すようにした結合

となります。これをpandasのmergeでおこなうのは簡単です。pandasのmergeは次のような書式となります。

pd.merge(df1,df2,on='key列',how='結合方法')

howの部分で結合方法を指定することができます。

内部結合:how=’inner’
外部結合:how=’outer’
左外部結合:how=’left’
右外部結合:how=’right’

これらを一つずつ見ていきます。

内部結合

それではまずは、内部結合から見ていきましょう。上記の書式にしたがって次のようにコードを打ち込みます。

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

結果は、指定したkey列が共通となるもののみが抽出されていますね。
※keyの値が0,1はdf1にもdf2にもある共通の値となっています。

外部結合

次は外部結合です。こちらもhowの部分で結合方法を変えるだけです。次のようにコードを打ち込みます。

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

今度は、keyの値が2のレコードはdf1にしかなく、keyの値が3のものはdf2にしかありません。外部結合では、このようにkeyが共通ではないものも残して結合します。

左外部結合

次に扱うのが、左外部結合です。既にやりかたはわかりますね。howの部分を’left’に変えるだけです。

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

今度は、key列に共通ではないものが含まれますが、左側に指定したdf1にしかないものは残され、右側にしかないものは残されていません。左外部結合は、左側に指定したデータフレームの値がすべて残される結合、です。

右外部結合

最後に右外部結合です。これも同様にhowの部分を’right’に変更するだけです。

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

今度は、右側に指定したdf2にしかないものが残され、左側のdf1にしかないものは残されていません。このように右外部結合は、 右側に指定したデータフレームの値がすべて残される結合、です。

スポンサーリンク

まとめ

いかがでしたでしょうか?理解すると簡単ですが、たまに混乱するときはありますよね。疑問に思ったことは、実際にデータを作って試してみると理解が深まります。今回は扱いませんでしたが、両方のデータフレームで、 keyに指定した列のある値が複数あるケースで結合した場合の挙動を確認しておくとよいかもしれません。
※今回は、df1にkeyの値が0であるものが2レコードあります。この場合は理解しやすいですが、df1にもdf2にもkeyの値が(たとえば)0であるレコードが複数あった場合どうなるか?

コメント

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