pd.merge: Gabungan Dalam dan Luar
Gabungkan dua DataFrames berdasarkan kolom kunci bersama menggunakan gabungan dalam dan luar, lalu pahami baris mana yang dipertahankan atau dihapus.
pd.merge: Gabungan Dalam dan Luar adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa Itu join?
join menggabungkan dua DataFrames dengan mencocokkan baris berdasarkan kolom kunci yang sama—konsep yang sama seperti klausa JOIN dalam SQL. Pandas menerapkan join melalui pd.merge(). Berbeda dari pd.concat() yang hanya menumpuk data, pd.merge() menyelaraskan baris dari dua tabel berbeda secara cerdas berdasarkan nilai yang cocok dalam satu atau beberapa kolom.
Kolom Kunci yang Sama
Agar penggabungan dapat dilakukan, kedua DataFrames harus memiliki setidaknya satu kolom dengan nilai yang sama—kolom kunci. Misalnya, tabel orders memiliki kolom customer_id, dan tabel customers juga memiliki kolom customer_id. Penggabungan berdasarkan customer_id menambahkan detail pelanggan ke setiap baris pesanan. Tentukan kunci dengan parameter on jika kedua DataFrames memiliki nama kolom yang sama.
import pandas as pd
orders = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'customer_id': [101, 102, 101, 103],
'amount': [250, 80, 320, 150]
})
customers = pd.DataFrame({
'customer_id': [101, 102, 104],
'name': ['Alice', 'Bob', 'Diana']
})Inner Join: Irisan Kedua Tabel
inner join (bawaan) hanya mempertahankan baris yang nilai kuncinya ada di kedua DataFrames. Baris di salah satu tabel yang tidak memiliki kunci yang cocok di tabel lainnya akan dihapus tanpa pemberitahuan. Dalam contoh pesanan, pelanggan 103 dan 104 tidak memiliki kecocokan di tabel lain, sehingga baris mereka tidak disertakan dalam hasil inner join.
# Inner join (default): only matching rows from both
result = pd.merge(orders, customers, on='customer_id', how='inner')
print(result)
# order_id customer_id amount name
# 0 1 101 250 Alice
# 1 3 101 320 Alice
# 2 2 102 80 Bob
# Order 4 (customer 103) dropped - no match in customers
# Diana (customer 104) dropped - no match in ordersOuter Join: Gabungan Kedua Tabel
outer join (how='outer') mempertahankan semua baris dari kedua DataFrames. Jika suatu baris tidak memiliki kunci yang cocok di tabel lain, kolom yang hilang akan diisi dengan NaN. Ini berguna saat Anda ingin memperoleh gambaran lengkap tentang kedua dataset, dengan tetap mempertahankan data yang tidak menemukan kecocokan.
result = pd.merge(orders, customers, on='customer_id', how='outer')
print(result)
# order_id customer_id amount name
# 0 1.0 101 250.0 Alice
# 1 3.0 101 320.0 Alice
# 2 2.0 102 80.0 Bob
# 3 4.0 103 150.0 NaN <- order with unknown customer
# 4 NaN 104 NaN Diana <- customer with no ordersMenggabungkan Kolom dengan Nama Berbeda
Jika kolom kunci memiliki nama berbeda di setiap DataFrame, gunakan left_on dan right_on, bukan on. Pandas mencocokkan baris ketika left_on dalam DataFrame kiri sama dengan right_on dalam DataFrame kanan. Kedua kolom kunci akan muncul dalam hasil; Anda dapat menghapus salah satunya yang tidak diperlukan setelahnya.
products = pd.DataFrame({
'prod_id': [10, 20, 30],
'name': ['Widget', 'Gadget', 'Doohickey']
})
order_lines = pd.DataFrame({
'item_id': [10, 10, 20],
'qty': [3, 1, 5]
})
result = pd.merge(order_lines, products,
left_on='item_id', right_on='prod_id')
print(result.drop(columns='prod_id'))
# item_id qty name
# 0 10 3 Widget
# 1 10 1 Widget
# 2 20 5 GadgetMenggabungkan Berdasarkan Beberapa Kolom
Untuk mencocokkan baris berdasarkan kombinasi beberapa kolom (kunci gabungan), berikan sebuah daftar ke on. Ini umum digunakan ketika satu kolom tidak cukup untuk menghasilkan kecocokan unik, misalnya saat menggabungkan berdasarkan year dan region. Semua kolom yang tercantum harus cocok secara bersamaan agar suatu baris disertakan dalam hasil.
targets = pd.DataFrame({
'year': [2023, 2023, 2024],
'region': ['East', 'West', 'East'],
'target': [100, 150, 120]
})
actuals = pd.DataFrame({
'year': [2023, 2024, 2024],
'region': ['East', 'East', 'West'],
'actual': [95, 115, 80]
})
result = pd.merge(targets, actuals, on=['year', 'region'], how='inner')
print(result)
# year region target actual
# 0 2023 East 100 95
# 1 2024 East 120 115Menangani Nama Kolom yang Tumpang Tindih
Jika kedua DataFrames memiliki kolom dengan nama yang sama (selain kunci), Pandas menambahkan akhiran untuk membedakannya. Nilai bawaannya adalah _x (kiri) dan _y (kanan). Anda dapat menyesuaikannya dengan parameter suffixes untuk menghasilkan nama yang lebih bermakna dan menghindari kebingungan dalam hasil.
df_a = pd.DataFrame({'id': [1, 2], 'value': [10, 20]})
df_b = pd.DataFrame({'id': [1, 2], 'value': [100, 200]})
# Default suffixes
print(pd.merge(df_a, df_b, on='id'))
# id value_x value_y
# Custom suffixes
print(pd.merge(df_a, df_b, on='id', suffixes=('_budget', '_actual')))
# id value_budget value_actualMemeriksa Duplikat yang Tidak Terduga
Kesalahan umum dalam penggabungan adalah pelipatan jumlah baris yang tidak terduga. Jika kolom kunci memiliki nilai duplikat di kedua DataFrames, penggabungan menghasilkan produk Kartesius dari semua baris yang cocok. Selalu periksa jumlah baris setelah penggabungan: jika lebih besar dari perkiraan, selidiki duplikat pada kolom kunci dengan df.duplicated(subset=['key']).sum().
# Both tables have duplicate keys -> cartesian product
left = pd.DataFrame({'id': [1, 1], 'val_l': ['a', 'b']})
right = pd.DataFrame({'id': [1, 1], 'val_r': ['x', 'y']})
result = pd.merge(left, right, on='id')
print(len(result)) # 4 rows! (2x2 cartesian product)
print(result)
# id val_l val_r
# 0 1 a x
# 1 1 a y
# 2 1 b x
# 3 1 b yParameter validate untuk Keamanan
Berikan parameter validate untuk menerapkan batasan hubungan pada penggabungan dan memunculkan error jika batasan tersebut dilanggar. 'one_to_one' mengharuskan kunci unik di kedua tabel, 'one_to_many' hanya mengharuskan kunci unik di tabel kiri, dan 'many_to_one' hanya di tabel kanan. Ini merupakan praktik pemrograman defensif yang sangat baik untuk mendeteksi masalah kualitas data sejak dini.
# Safe merge: validate that customer_id is unique in customers
try:
result = pd.merge(orders, customers,
on='customer_id',
how='inner',
validate='many_to_one')
print('Merge OK, shape:', result.shape)
except Exception as e:
print('Merge error:', e)Memeriksa Cakupan dengan indicator
Berikan indicator=True untuk menambahkan kolom _merge ke hasil yang menunjukkan asal setiap baris: 'left_only', 'right_only', atau 'both'. Ini berguna setelah outer join untuk mengidentifikasi data mana yang menemukan kecocokan dan mana yang tidak, sehingga Anda dapat mengaudit kualitas data sebelum menghapus kolom indikator.
result = pd.merge(orders, customers, on='customer_id',
how='outer', indicator=True)
print(result['_merge'].value_counts())
# both 3
# left_only 1 <- orders with no customer record
# right_only 1 <- customers with no orders
# Find unmatched orders
print(result[result['_merge'] == 'left_only'])Ringkasan Inner vs Outer
Untuk merangkum kedua jenis join tersebut: inner join menghasilkan irisan—hanya baris dengan kunci yang cocok di kedua DataFrames. Outer join menghasilkan gabungan—semua baris dari kedua DataFrames, dengan NaN jika tidak ada kecocokan. Sebagai pelengkap: left join mempertahankan semua baris dari DataFrame kiri, sedangkan right join mempertahankan semua baris dari DataFrame kanan. Keduanya akan dibahas dalam pelajaran berikutnya.
# Quick reference
# how='inner' -> intersection: only matched rows
# how='outer' -> union: all rows from both, NaN for no match
# how='left' -> all left rows + matched right rows
# how='right' -> all right rows + matched left rows
# Most common: inner (default) for enrichment, left for preserving recordsPemeriksaan Singkat
Uji pemahaman Anda tentang inner dan outer join pada pd.merge dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda telah mempelajari: pd.merge() dengan how='inner' hanya mempertahankan baris yang cocok dari kedua DataFrames, sedangkan how='outer' mempertahankan semua baris dengan NaN untuk data yang tidak cocok; on menentukan kunci yang sama, sedangkan left_on/right_on menangani nama kolom yang berbeda; dan parameter indicator membantu mengaudit baris mana yang cocok. Selanjutnya, kita akan mempelajari left dan right join untuk mempertahankan semua baris dari salah satu sisi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “pd.merge: Gabungan Dalam dan Luar” gratis?
Ya — teks lengkap “pd.merge: Gabungan Dalam dan Luar” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “pd.merge: Gabungan Dalam dan Luar”?
Gabungkan dua DataFrames berdasarkan kolom kunci bersama menggunakan gabungan dalam dan luar, lalu pahami baris mana yang dipertahankan atau dihapus. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “pd.merge: Gabungan Dalam dan Luar” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- pd.concat untuk Menumpuk DataFrames
- pd.merge: Gabungan Dalam dan Luar
- Gabungan Kiri dan Kanan
- Menggabungkan Berdasarkan Indeks