この記事では2つのpandas.DataFrameを結合する関数pd.mergeについて紹介します。pandas.DataFrame.mergeメソッドとしても同じ機能が提供されているので、どちらか好きな方を使ってください。
この関数は2つのDataFrameを横方向に結合する機能があります。データ解析で特徴量をそれぞれのDataFrameで作った後に結合する、などの使い方ができるので、ぜひ覚えておきましょう。
pandas.mergeの使い方[基本編]
前準備
サンプルのDataFrameを2つ用意しましょう。
import pandas as pd
import numpy as np
data = np.arange(0,20).reshape(4,5)
feature_names = np.array(["a","b","c","d","e"])
df1 = pd.DataFrame(data[:,:3],
columns=feature_names[:3])
df1
df2 = pd.DataFrame(data[:,[2,3,4,0]],
columns=feature_names[[2,3,4,0]])
df2
2つのDataFrameを横に結合
pd.mergeは2つのDataFrameを横に結合する関数です。この機能を使うことで、2つのDataFrameの同じ列を統合して新しいDataFrameを作成できます。
pd.merge(df1,df2)
pandas.mergeの使い方[応用編]
on引数で明示的に統合する列を指定
on引数に統合させたい列名を指定することで、その列のみを統合した新しいDataFrameを作成できます。
ここで指定した列以外で重複箇所がある場合は、c_x, c_yのように第一引数と第二引数のDataFrameの列が区別できるような名前が割り当てられます。
pd.merge(df1,df2, on="a")
pd.merge(df1,df2, on="c")
複数の列を指定する場合はlistにまとめればOKです。
pd.merge(df1,df2, on=["a","c"])
how引数で結合の方法を変える
how引数は何も指定しない場合、how=”inner”とされています。これはDataFrame同士をどうやって結合するかを決めています。howの値は以下の4つが使えます。
第一引数と第二引数で共通する列を使う
第一引数と第二引数の両方の列を使う
第一引数(左)の列をすべて使う
第二引数(右)の列をすべて使う
df3 = df2.copy()
df3["a"]= [10,20,30,40]
df3
pd.merge(df1,df3, how="outer")
pd.merge(df1,df3, how="left")
pd.merge(df1,df3, how="right")
pd.merge(df2,df3, how="outer")
まとめ
この記事では2つのpandas.DataFrameを結合する関数pd.mergeを紹介しました。この記事で解説したpd.mergeの大事なことは以下の通り。
- 2つのDataFrameを結合できる
- on引数で統合する列名を(複数)指定できる
- how引数で結合方法を選択できる
この3つを覚えて使いこなしてください。