Satu kolom kunci tidak selalu cukup unik untuk mengidentifikasi baris. Harga satu produk bisa berbeda antarkota, sehingga tabel harga hanya bisa diandalkan ketika pasangan kota dan produk dicocokkan sekaligus; mencocokkan kolom produk saja akan menarik harga yang keliru. Untuk kebutuhan seperti ini, parameter on pada pd.merge() menerima daftar kolom, dan pandas menganggap baris cocok hanya jika seluruh kolom dalam daftar bernilai sama. Pada Chapter ini kita membangun laporan penjualan lintas kota dengan kunci majemuk, lalu melanjutkan analisis setelah penggabungan selesai.
Kapan Satu Kolom Kunci Tidak Cukup #
Kunci majemuk dibutuhkan ketika keunikan baris baru tercapai setelah beberapa kolom digabungkan. Tabel transaksi kita memuat penjualan setiap produk di setiap kota; satu produk muncul di lebih dari satu kota, dan satu kota memuat lebih dari satu produk. Tabel harga mengikuti pola yang sama karena setiap kota menetapkan harganya sendiri. Kolom kota saja tidak membedakan produk, dan kolom produk saja tidak membedakan kota, sehingga pasangan (kota, produk) itulah kunci yang benar. Aturan praktisnya sederhana: daftar kolom kunci harus menghasilkan kombinasi yang tidak berulang di masing-masing tabel.
on dengan Daftar Kolom #
Skrip berikut memuat tabel transaksi dan tabel harga, menggabungkannya dengan on=["kota", "produk"], lalu menghitung kolom total dari hasil penggabungan.
import pandas as pd
transaksi = pd.DataFrame({
"kota": ["Jakarta", "Jakarta", "Bandung", "Bandung"],
"produk": ["Kopi Gayo", "Teh Melati", "Kopi Gayo", "Teh Melati"],
"unit": [10, 5, 8, 12],
})
harga = pd.DataFrame({
"kota": ["Jakarta", "Jakarta", "Bandung", "Bandung"],
"produk": ["Kopi Gayo", "Teh Melati", "Kopi Gayo", "Teh Melati"],
"harga": [85000, 32000, 87000, 34000],
})
gabungan = pd.merge(transaksi, harga, on=["kota", "produk"])
print(gabungan)
print()
gabungan["total"] = gabungan["unit"] * gabungan["harga"]
print(gabungan)Output yang Dihasilkan:
kota produk unit harga
0 Jakarta Kopi Gayo 10 85000
1 Jakarta Teh Melati 5 32000
2 Bandung Kopi Gayo 8 87000
3 Bandung Teh Melati 12 34000
kota produk unit harga total
0 Jakarta Kopi Gayo 10 85000 850000
1 Jakarta Teh Melati 5 32000 160000
2 Bandung Kopi Gayo 8 87000 696000
3 Bandung Teh Melati 12 34000 408000Mari kita telaah apa yang terjadi pada kode di atas:
- Baris 3-7: DataFrame
transaksidibuat dengan empat baris penjualan; pasangankotadanprodukpada tabel ini tidak ada yang berulang. - Baris 9-13: DataFrame
hargadibuat dengan struktur pasangan yang sama, tetapi nilai harganya berbeda antar kota untuk produk yang sama. - Baris 15-16:
pd.merge(transaksi, harga, on=["kota", "produk"])mencocokkan kedua tabel pada kombinasi kedua kolom; hargaKopi Gayoyang ditarik untuk baris Jakarta adalah85000, bukan87000milik Bandung. - Baris 19-20: kolom
totaldihitung dariunitdikalihargasetelah penggabungan, dan hasilnya adalah laporan nilai penjualan per kota per produk.
Perhatikan urutan kolom pada hasil: kolom kunci kota dan produk muncul lebih dulu, disusul kolom dari tabel kiri, lalu kolom dari tabel kanan. Kecocokan berjalan baris demi baris pada seluruh kombinasi kunci; satu kolom saja yang berbeda membuat pasangan tersebut tidak cocok. Halaman pandas.merge
mendokumentasikan parameter on yang menerima label tunggal maupun list, dan panduan merging
memuat contoh kunci majemuk dengan tabel yang lebih besar.
Melanjutkan Analisis Setelah Join #
Kolom total pada skrip menunjukkan pola kerja yang lazim: merge dulu, analisis kemudian. Setelah tabel tergabung, seluruh alat yang sudah kita pelajari berlaku normal, mulai dari groupby untuk rekap per kota hingga sort_values() untuk peringkat produk. Satu risiko yang perlu dijaga adalah kunci ganda yang lolos dari pemeriksaan: satu kombinasi kota, produk yang berulang di tabel harga akan melipatgandakan baris transaksinya secara senyap, dan kolom total ikut terhitung dua kali pada rekap berikutnya. Kesalahan semacam ini berdampak besar pada laporan, tetapi sebenarnya bisa dicegah oleh pandas sendiri. Chapter berikutnya memperkenalkan parameter validate yang membuat pandas memeriksa relasi kunci secara otomatis dan memunculkan error yang jelas ketika pola relasi menyimpang.