やりたいこと
- 2つのリストをキーとなる項目で横結合する
ライブラリ
pandas
試してみる
- 左外部結合
- 右外部結合
- 内部結合
SQL
でいうところの
left outer join
right outer join
inner join
サンプルデータ
sample
import pandas as pd
# 購入リスト
data1 = [
['100', '2', 'りんご'],
['200', '3', 'みかん'],
['300', '1', 'もも'],
['500', '2', 'メロン']
]
df1 = pd.DataFrame(data=data1, columns=['商品ID', '個数', '商品名'])
# 価格リスト
data2 = [
['100', '150'],
['200', '100'],
['300', '200'],
['400', '300'],
]
df2 = pd.DataFrame(data=data2, columns=['商品ID', '価格'])
サンプルデータ
# df1
商品ID 個数 商品名
0 100 2 りんご
1 200 3 みかん
2 300 1 もも
3 500 2 メロン
#df2
商品ID 価格
0 100 150
1 200 100
2 300 200
3 400 300
左外部結合
-
df1
全てと結合キーが一致するdf2
を返す
構文
pd.merge(df1, df2, how="left", on="結合キー")
sample_left_join
r = pd.merge(df1, df2, how="left", on="商品ID")
print(r)
結果
商品ID 個数 商品名 価格
0 100 2 りんご 150
1 200 3 みかん 100
2 300 1 もも 200
3 500 2 メロン NaN
- 購入リストと一致する価格リスト(商品ID=100, 200, 300)と、購入リストにしかない商品ID=500が返ってくる
- 価格リストには商品ID=500はないので価格は
NaN
が返ってくる - 購入リストには商品ID=400はないので返ってこない
右外部結合
-
df2
全てと結合キーが一致するdt1
を返す
構文
pd.merge(dtf, df2, how="right", on="結合キー")
sample_right_join
r = pd.merge(df1, df2, how="right", on="商品ID")
print(r)
結果
商品ID 個数 商品名 価格
0 100 2 りんご 150
1 200 3 みかん 100
2 300 1 もも 200
3 400 NaN NaN 300
- 価格リストと一致する購入リスト(商品ID=100, 200, 300)と、価格リストにしかない商品ID=400が返ってくる
- 購入リストには商品ID=400はないので個数と商品名は
NaN
が返ってくる
内部結合
-
df1
とdf2
の結合キーが一致するレコードを返す
構文
pd.merge(df1, df2, how="inner", on="結合キー")
sample_right_join
r = pd.merge(df1, df2, how="right", on="商品ID")
print(r)
結果
商品ID 個数 商品名 価格
0 100 2 りんご 150
1 200 3 みかん 100
2 300 1 もも 200
- 商品IDが一致する購入リストと価格リスト(商品ID=100, 200, 300)が返ってくる