【pandas】データ結合メソッドpd.merge()の使い方を説明する

pandas
Yamu
Yamu

今回は2つのデータを
データフレームから
結合する
方法を説明します

[PR]※本サイトには、プロモーションが含まれています

今回紹介する結合

コード意味
pd.merge(df1,df2, on =’キー’)2つのデータの共通キーを利用してデータを結合する関数

pd.mergeでデータを結合してみる

pd.merge(df1, df2, on=’key’)

というコードでデータを結合をします

on=’Key’でキーを指定します

データ1に生徒idと名前が入っているデータがあります

student_idname
1田中
2山田
3Bob
データセット1.学生情報

データ2に生徒idと各生徒の成績が入っているデータがあります

student_id数学英語国語物理
1ACCB
2CAAC
3CADC
データセット2.成績情報

二つのデータセットで共通する項目は

student_id()です

この学生idをキーにしてデータを紐づけます

import pandas as pd

# 学生情報
data1 ={
    "student_id" :[1, 2, 3],
    "name" : ["田中", "山田", "Bob"]
}

# 成績情報
data2 = {
    "student_id": [1, 2, 3],
    "数学": ["A", "C", "C"],
    "英語": ["C", "C", "A"],
    "国語": ["C", "A", "D"],
    "物理": ["B", "C", "C"]
}
student_df = pd.DataFrame(data1)
grades_df = pd.DataFrame(data2)

print(student_df)
print(grades_df)
print(pd.merge(student_df,grades_df, on ="student_id"))

実行結果

   student_id name
0           1   田中
1           2   山田
2           3  Bob
   student_id 数学 英語 国語 物理
0           1  A  C  C  B
1           2  C  C  A  C
2           3  C  A  D  C
   student_id name 数学 英語 国語 物理
0           1   田中  A  C  C  B
1           2   山田  C  C  A  C
2           3  Bob  C  A  D  C

mergeの結合オプション how

結合を行うmerge関数は

howオプションがあります

how意味
outer全てのキーで結合
inner共通キーのみ結合
left片方のキーで結合
right片方のキーで結合

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

outer結合は

指定したキーに基づいて

全てのデータを結合し

対応するキーがない場合は

NaN(欠損値)を表示します

pd.merge(student_df,grades_df, on ="student_id", how = "outer")

実際に確認してみます

生徒idと名前が入っているデータ1

id 4の佐藤君を追加します

data1 ={
    "student_id" :[1, 2, 3, 4],
    "name" : ["田中", "山田", "Bob","佐藤"]
}

生徒idと成績データに

id 6の人のデータを追加します

# 成績情報
data2 = {
    "student_id": [1, 2, 3, 6],
    "数学": ["A", "C", "C", "E"],
    "英語": ["C", "C", "A","E"],
    "国語": ["C", "A", "D","E"],
    "物理": ["B", "C", "C","E"]
}

下記のコードでhow =”outer”の挙動を確認します

import pandas as pd

# 学生情報
data1 ={
    "student_id" :[1, 2, 3, 4],
    "name" : ["田中", "山田", "Bob","佐藤"]
}

# 成績情報
data2 = {
    "student_id": [1, 2, 3, 6],
    "数学": ["A", "C", "C", "E"],
    "英語": ["C", "C", "A","E"],
    "国語": ["C", "A", "D","E"],
    "物理": ["B", "C", "C","E"]
}
student_df = pd.DataFrame(data1)
grades_df = pd.DataFrame(data2)

print(student_df)
print(grades_df)
print(pd.merge(student_df,grades_df, on ="student_id", how = "outer"))

実行結果

   student_id name
0           1   田中
1           2   山田
2           3  Bob
3           4   山田
   student_id 数学 英語 国語 物理
0           1  A  C  C  B
1           2  C  C  A  C
2           3  C  A  D  C
   student_id name   数学   英語   国語   物理
0           1   田中    A    C    C    B
1           2   山田    C    C    A    C
2           3  Bob    C    A    D    C
3           4   山田  NaN  NaN  NaN  NaN
Yamu
Yamu

キーの要素全てで
結合されています
対応していないものは
NaN

内部結合

inner結合は一致するキー

のみ結合されます

先のコードのouterをinnerに書き換えてください

pd.merge(student_df,grades_df, on ="student_id", how = "inner")

実行結果

   student_id name
0           1   田中
1           2   山田
2           3  Bob
3           4   佐藤
   student_id 数学 英語 国語 物理
0           1  A  C  C  B
1           2  C  C  A  C
2           3  C  A  D  C
3           6  E  E  E  E
   student_id name 数学 英語 国語 物理
0           1   田中  A  C  C  B
1           2   山田  C  C  A  C
2           3  Bob  C  A  D  C
Yamu
Yamu

共通キー1,2,3のみ
結合されています

左側結合

left結合は

データ1のキーで

結合するオプションです

pd.merge(student_df,grades_df, on ="student_id", how = "left")

実行結果

   student_id name
0           1   田中
1           2   山田
2           3  Bob
3           4   佐藤
   student_id 数学 英語 国語 物理
0           1  A  C  C  B
1           2  C  C  A  C
2           3  C  A  D  C
3           6  E  E  E  E
   student_id name   数学   英語   国語   物理
0           1   田中    A    C    C    B
1           2   山田    C    C    A    C
2           3  Bob    C    A    D    C
3           4   佐藤  NaN  NaN  NaN  NaN
Yamu
Yamu

データ1のキーが
1,2,3,4なので
データ1のキーで
結合していることが

分かりますね

右側結合

right結合は

データ2のキーで

結合するオプションです

pd.merge(student_df,grades_df, on ="student_id", how = "right")

実行結果

   student_id name
0           1   田中
1           2   山田
2           3  Bob
3           4   佐藤
   student_id 数学 英語 国語 物理
0           1  A  C  C  B
1           2  C  C  A  C
2           3  C  A  D  C
3           6  E  E  E  E
   student_id name 数学 英語 国語 物理
0           1   田中  A  C  C  B
1           2   山田  C  C  A  C
2           3  Bob  C  A  D  C
3           6  NaN  E  E  E  E
Yamu
Yamu

データ2のキーが
1,2,3,6なので
データ2のキーで
結合していることが

分かりますね

参考文献

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