3秒でわかる
別々に育った複数のデータや作業を、1 つにまとめる操作の総称。突き合わせる鍵と、重なったときの扱いを決めるのが要点です。
もう少し詳しく
どういうものか
マージは、分かれていたものを 1 つに合わせる操作を広く指す言葉です。バージョン管理ではブランチの合流、データ処理では 2 つの表の結合、アルゴリズムでは整列済みの列を 1 本にする処理を指します。呼び名は同じでも、共通しているのは「何を鍵に対応付けるか」と「重なったときどうするか」を決める点です。
具体例
表のマージは、共通する列を鍵にして横につなげます。
import pandas as pd
users = pd.DataFrame({"user_id": [1, 2, 3], "name": ["佐藤", "鈴木", "高橋"]})
orders = pd.DataFrame({"user_id": [1, 1, 3], "amount": [1200, 800, 4500]})
df = pd.<a href="/glossary/merge" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">merge</a>(users, orders, on="user_id", how="left")how で残す範囲が変わります。inner なら両方にある行だけ、left なら左の表を全部残し、相手が無いところは欠損になります。注文が無い鈴木さんを残したいかどうかで選び分けます。
整列済みの 2 列を突き合わせる処理も同じ考え方です。
[1, 4, 9] と [2, 3, 10] を先頭から比べて小さいほうを取る
→ 1, 2, 3, 4, 9, 10これを繰り返すのがマージソートで、部分ごとに整列してから合わせるという発想が土台にあります。
つまずきやすいところ
鍵が重複していると、行数が増えます。上の例では、user_id が 1 の注文が 2 件あるため、佐藤さんの行が 2 行に増えました。マージ後に件数が想定より多いときは、鍵の重複を疑います。
鍵の型が違う場合も静かに失敗します。片方が文字列の "1"、もう片方が数値の 1 だと、一致せず全部欠損になります。エラーにならず結果だけが空になるので、マージ前に dtypes を見て、後に件数も確かめます。
似た用語との違い
| 場面 | 何をまとめるか | 衝突の扱い |
|---|---|---|
| Git | ブランチの変更 | 同じ行の編集は人が解決する |
| データ処理 | 2 つの表 | 鍵が重複すると行が増える |
| 整列アルゴリズム | 整列済みの 2 列 | 小さいほうから順に取る |
覚え方
マージで最初に決めることは 2 つだけです。何を鍵にして合わせるのか、ぶつかったらどちらを採るのか。この 2 つが決まっていないまま手を動かすと、Git でもデータ処理でも必ず後で揉めます。逆に言えば、この 2 つさえ言葉にできていれば、どの場面のマージも同じ手順で進められます。