Python入門:pandasのjoinとmergeの違いを整理して理解する

pandas python 1

pandasで複数のデータを結合する方法として、
mergejoin の2つがあります。

どちらも似たような処理に見えるため、
「どっちを使えばいいのか分からない」と感じることがよくあります。

実際、この2つはできることが重なっている一方で、
使いどころにははっきりとした違いがあります。

この記事では、

  • mergeとjoinは何が違うのか
  • どの場面でどちらを使うべきか

を、できるだけシンプルに整理していきます。

pandasの導入記事はこちら。

Python入門:pandasの基本をやさしく解説(データ操作の超入門) – Lean Data Office

mergeは「列を基準に結合する」

まず、基本となるのが merge です。

これまで見てきたように、mergeは
「共通の列(キー)を使ってデータを結合する」機能です。

例えば、次のような2つのデータがあるとします。

Python

import pandas as pd

df_customers = pd.DataFrame({

“customer_id”: [1, 2, 3],

“name”: [“A”, “B”, “C”]

})

df_sales = pd.DataFrame({

“customer_id”: [1, 2, 4],

“sales”: [100, 200, 300]

})
Show more lines

この2つを結合する場合、mergeでは次のように書きます。

Python

pd.merge(df_customers, df_sales, on=”customer_id”)
Show more lines

ここでは「customer_id」という列が一致するもの同士が結びつけられます。

このように、mergeは「列を基準にして結合する」のが基本です。


joinは「インデックスを基準に結合する」

一方で join は、少し考え方が異なります。

joinは、インデックス(行ラベル)を基準にして結合する機能です。

先ほどのデータを、インデックスを使う形に変えてみます。

Python

df_customers = df_customers.set_index(“customer_id”)

df_sales = df_sales.set_index(“customer_id”)
Show more lines

この状態で join を使うと、

Python

df_customers.join(df_sales)
Show more lines

と書くだけで結合できます。

見て分かる通り、on= のように列を指定する必要がなく、
インデックス同士が自動的に対応付けられます。


違いはどこにあるのか

ここまでを見ると、

  • merge:列を使う
  • join:インデックスを使う

という違いがあることが分かります。

ただ、実務で重要なのは
「どちらでもできる」ではなく、**「どちらが自然か」**です。


実務での使い分け

データを扱うとき、多くの場合は
「キーとなる列」が明確に存在しています。

例えば、

  • customer_id
  • product_id

といった項目です。

このような場合は、最初から列を使って結合した方が分かりやすいため、
merge が自然な選択になります。

一方で、すでにデータがインデックスで整理されている場合もあります。

例えば、時系列データや、IDをインデックスとして読み込んでいる場合です。

このようなときは、わざわざ列に戻すよりも、
そのまま join を使った方がシンプルに書けます。


joinはmergeの簡易版と考えると理解しやすい

joinは、機能としてはmergeに近いものを持っていますが、
書き方はかなりシンプルになっています。

そのため、

「インデックスが揃っている前提で手軽に結合したい」

というときに向いています。

逆に言うと、キーが複数あったり、
結合条件を細かく制御したい場合は、mergeの方が適しています。


出力の違いにも注意する

joinとmergeでは、デフォルトの結合方法にも違いがあります。

mergeは何も指定しない場合、
両方に存在するデータだけを残す「inner結合」になります。

一方、joinはデフォルトで
左側のデータをすべて残す「left結合」になります。

この違いは意外と見落とされやすく、
結果が変わる原因になるため注意が必要です。


なぜ両方あるのか

ここまで理解すると、

「mergeだけでよくないか」と感じるかもしれません。

実際、機能の柔軟さだけを見ればmergeの方が上です。

それでもjoinが用意されている理由は、
「コードを簡潔に書けるから」です。

インデックスが整っている場合に、
毎回 on= を書くのは少し冗長になります。

そのため、用途を絞ったシンプルな書き方として
joinが用意されています。


まとめ

mergeとjoinはどちらもデータ結合のための機能ですが、
考え方には明確な違いがあります。

mergeは列を基準にして結合するため、
ほとんどの実務ケースで使いやすい方法です。

一方でjoinは、インデックスを基準にすることで、
シンプルに書ける場面に向いています。

迷った場合は、まずmergeを使うと考えて問題ありません。

その上で、インデックスが揃っていて
「もっと簡単に書けそうだ」と感じたときに
joinを使う、という順番で考えると理解しやすくなります。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。