ITいろいろ

プログラミングやクラウド、データ解析など、ITにかかわることをいろいろと書いています。

2つのデータフレームを1つに結合(行、列の追加)

前回はPandasのconcatを使って行や列にデータフレイムを追加する方法を紹介しました。 その中のオプションjoinで、内部結合と外部結合の方法を紹介しましたが、このオプションには左外部結合(または右外部結合)がありません

ただ、少し工夫することでできる方法がありますので、紹介します。

やりたいこと

左外部結合(df1の列(a,b,c)だけで行を追加)

コード紹介

# import
import pandas as pd

# データセットを作る
df1 = pd.DataFrame({'a':[1,4], 'b':[2,5], 'c':[3,6]})
df2 = pd.DataFrame({'a':[7], 'b':[8], 'd':[9]})

# 左外部結合(行)
df_tmp1 = pd.DataFrame([], columns=df1.columns)
df_tmp2 = pd.concat([df2, df_tmp1])
df3 = pd.concat([df1, df_tmp2], join='inner')

# インデックスリセット
df3 = df3.reset_index(drop=True)


df3

出力結果

少し解説

df_tmp1

df1の列を入れたからのデータフレームを作っています。

pd.DataFrame([], columns=df1.columns)

df_tmp2

上記の空のデータフレームとdf2を結合することで、df1にしかない列を追加します。

pd.concat([df2, df_tmp1])

df3

あとはdf2にしかない列(d)は不要ですので、innner joinします。

pd.concat([df1, df_tmp2], join='inner')

他にも良い方法があるかもしれませんが、取り急ぎ。