0Pricing
Pandas & NumPy Academy · Pelajaran

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 orders

Outer 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 orders

Menggabungkan 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  Gadget

Menggabungkan 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     115

Menangani 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_actual

Memeriksa 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     y

Parameter 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 records

Pemeriksaan 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

  1. pd.concat untuk Menumpuk DataFrames
  2. pd.merge: Gabungan Dalam dan Luar
  3. Gabungan Kiri dan Kanan
  4. Menggabungkan Berdasarkan Indeks
← Kembali ke Pandas & NumPy Academy