Penjelasan sederhana
Kamu punya dua tabel: daftar karyawan dengan kode departemen, dan daftar departemen dengan namanya. merge() mencocokkan kode itu dan menempelkan nama departemen ke tabel karyawan, seperti XLOOKUP untuk seluruh kolom.
Sintaks
pd.merge(kiri, kanan, on=None, left_on=None, right_on=None, how='inner')
| Bagian | Keterangan |
|---|---|
on | Nama kolom kunci kalau namanya sama di kedua tabel. |
left_on / right_on | Kolom kunci kalau namanya berbeda. |
how | 'inner' hanya yang cocok, 'left' semua baris kiri, 'right' semua baris kanan, 'outer' semuanya. |
df adalah nama DataFrame (tabel) yang sedang diolah. Contoh di bawah memakai import pandas as pd dan import numpy as np, yang sudah disiapkan otomatis.
Contoh merge()
Data contoh: karyawan, departemen (sudah tersedia sebagai DataFrame)
DataFrame karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id |
|---|---|---|---|---|---|---|
| 1 | Andi Pratama | 3 | Bandung | 12500000 | 2019-03-11 | NaN |
| 2 | Bunga Lestari | 1 | Jakarta | 9800000 | 2020-07-01 | NaN |
| 3 | Candra Wijaya | 3 | Bandung | 8200000 | 2021-02-15 | 1 |
| 4 | Dewi Anggraini | 2 | Jakarta | 7500000 | 2022-05-09 | 6 |
| 5 | Eko Saputra | 1 | Jakarta | 6900000 | 2023-01-16 | 2 |
| 6 | Fajar Nugroho | 2 | Surabaya | 11000000 | 2018-09-03 | NaN |
| 7 | Gita Permata | 3 | Jakarta | 8200000 | 2023-08-21 | 1 |
| 8 | Hendra Gunawan | NaN | Medan | 5500000 | 2024-04-02 | NaN |
DataFrame departemen
| id | nama_dept | lokasi |
|---|---|---|
| 1 | Keuangan | Jakarta |
| 2 | Marketing | Jakarta |
| 3 | IT | Bandung |
| 4 | Legal | Surabaya |
pd.merge(
karyawan[['nama', 'dept_id']],
departemen,
left_on='dept_id', right_on='id', how='left',
)[['nama', 'nama_dept', 'lokasi']]
Hasil 8 baris × 3 kolom
| nama | nama_dept | lokasi |
|---|---|---|
| Andi Pratama | IT | Bandung |
| Bunga Lestari | Keuangan | Jakarta |
| Candra Wijaya | IT | Bandung |
| Dewi Anggraini | Marketing | Jakarta |
| Eko Saputra | Keuangan | Jakarta |
| Fajar Nugroho | Marketing | Jakarta |
| Gita Permata | IT | Bandung |
| Hendra Gunawan | NaN | NaN |
Setiap karyawan mendapat nama dan lokasi departemennya. Hendra tetap muncul dengan NaN karena memakai how='left' dan ia belum punya departemen.
Cara kerjanya, langkah demi langkah
- Kolom
dept_iddi tabel karyawan dicocokkan denganiddi tabel departemen. how='left'menjaga semua karyawan tetap ada, termasuk yang tidak punya pasangan.- Tiga kolom dipilih dari hasil gabungan.
Dipakai untuk apa di kantor?
- Menempelkan nama produk ke tabel transaksi, atau data pelanggan ke tabel pesanan.
- Mencari data yang tidak punya pasangan di tabel lain.
Kesalahan yang sering terjadi
- Memakai how='inner' (bawaan) tanpa sadar, sehingga baris tanpa pasangan hilang.
- Kunci di salah satu tabel dobel, sehingga jumlah baris hasil membengkak.
concat()