[pandas] 2つのDataFrameを水平方向に結合する方法3選

はじめに

今回、2つのDataFrame水平方向に結合 (OUTER JOIN) したいと思い、調べてみました。

さすがは痒いところに手が届くDataFrame、様々な方法がありました。

定番っぽいものを3つまとめたので、共有させて頂きます。

いきなり結論コード

  • 下の実行ボタンで動作確認できます。
  • コードを書き換えて実行することもできます。
  • 試したいパターンを適宜コメントアウト解除して試して下さい。
  • 元のコードに戻したい場合は、このページを再読み込みしてもらえると元に戻ります。

解説

水平方向に結合する前のDataFrameは、こんな感じです。

kけけtけつけつけ

これらのDataFrame達を…

こうします!

それでは、それぞれ一言で解説します。

1. join式

df1.join(df2, how='outer')

今回、おそらく第一選択になりそうなのはこのjoin式かと思われます。

デフォルトだとINNER JOINになるので注意

2. concat式

pd.concat([df1, df2], axis=1)

パラメータから察するに、おそらく垂直方向 (縦の) 連結を想定していた様子

axis=1とすることで水平方向の連結にも対応したといった印象。

3. merge式

pd.merge(df1, df2, right_index=True, left_index=True, how='outer')

こちらもパラメータから察するに、そもそもはインデックスではなく任意のカラム同士でのJOINを想定していた様子

right_index=True, left_index=Trueとすることで、インデックスを軸とした連結に対応したといった印象。

さいごに

今日は、2つのDataFrameを縦に結合 (OUTER JOIN)する方法をまとめました。

何かツッコミがあれば、Twitterでお待ちしております!

最後まで読んで頂き、ありがとうございました!

PON

PON

30代で、完全未経験から独学でWeb系エンジニアになった人。 前職では、超絶ブラック企業にはまり込んでしまい、年間1200時間の残業をしていたが、娘が生まれたことで我に返って転職を決意。 現在は、大阪にあるベンチャー企業の自社開発プロジェクトで、リードエンジニアとして奮闘中。 主戦場はバックエンドで、Pythonでのデータ分析が武器。 とは言いつつ、SPAのフロントエンドを実装したり、インフラ設計したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と1歳になる娘の3人暮らし。 最近は一日一食。 何かご用件がある方は、TwitterのDMからどうぞ。