Pandas pivot_table: Buat Pivot di Python (2026)
TL;DR
pandas pivot_table meringkas DataFrame jadi tabel silang, mirip pivot table Excel tapi dalam kode. Kamu tentuin index (baris), columns (kolom), values (nilai yang dihitung), dan aggfunc (cara ngitungnya, misalnya sum atau mean). Bedanya dari groupby, pivot_table langsung nyusun hasil jadi format matriks yang enak dibaca, plus bisa nambah subtotal lewat margins=True.
pandas pivot_table ngeringkes DataFrame jadi tabel silang cuma dalam satu baris kode, dan hasilnya bisa kamu jalanin ulang tiap data baru masuk.
Pivot table Excel enak buat data kecil. Tapi begitu datanya ratusan ribu baris atau kamu harus ngulang laporan yang sama tiap minggu, klik-klik manual jadi beban. pivot_table ngerjain hal yang sama, tapi otomatis.
Di bawah ini aku bahas dari struktur dasarnya sampai trik margins dan multi-agregasi yang bikin satu tabel bisa nunjukin banyak sudut.
Apa itu pivot_table di pandas?
pivot_table adalah metode pandas yang meringkas DataFrame jadi tabel silang. Kamu tentuin kolom mana jadi baris, kolom mana jadi kolom, nilai apa yang dihitung, dan cara ngitungnya. Hasilnya matriks rapi, mirip pivot table Excel, tapi berupa kode yang bisa diulang.
Empat argumen intinya:
index: kolom yang jadi bariscolumns: kolom yang jadi header kolomvalues: kolom angka yang dihitungaggfunc: cara ngitungnya (sum, mean, count, dan lain-lain)
Kalau kamu udah pernah bikin pivot di spreadsheet, konsepnya sama persis. Aku udah bahas versi Sheets-nya di Pivot Table Google Sheets. Definisi umum pivot table ada di glossary pivot table.
Gimana cara pakai pivot_table paling dasar?
Mulai dari satu index dan satu nilai. Misalnya total penjualan per cabang.
import pandas as pd
df = pd.read_csv("transaksi.csv")
pivot = df.pivot_table(
index="cabang",
values="total",
aggfunc="sum"
)
print(pivot)
Hasilnya tabel dua kolom: nama cabang dan total penjualannya. Ini kayak GROUP BY, tapi udah ketata jadi format tabel.
Naik satu level, tambahin columns biar jadi silang. Total penjualan per cabang, dipecah per kategori:
pivot = df.pivot_table(
index="cabang",
columns="kategori",
values="total",
aggfunc="sum"
)
Sekarang tiap baris cabang, tiap kolom kategori, dan tiap sel isinya total penjualan cabang itu di kategori itu. Satu tampilan, banyak perbandingan.
Apa beda pivot_table dan groupby?
Dua-duanya ngeringkes, tapi bentuknya beda.
| Aspek | groupby | pivot_table |
|---|---|---|
| Bentuk hasil | Panjang (long) | Matriks (wide) |
| Subtotal | Manual | margins=True |
| Sel kosong | Gak muncul | NaN, bisa diisi |
| Enak dibaca | Buat pipeline | Buat laporan |
Aturan praktisnya: kalau hasilnya mau dilihat manusia sebagai laporan, pakai pivot_table. Kalau hasilnya mau diolah lagi di langkah berikut, groupby sering lebih fleksibel. Dua-duanya bagian dari kerjaan data wrangling harian.
Gimana nambah subtotal dan isi sel kosong?
Dua argumen yang bikin tabel siap laporan: margins dan fill_value.
pivot = df.pivot_table(
index="cabang",
columns="kategori",
values="total",
aggfunc="sum",
fill_value=0,
margins=True,
margins_name="Total"
)
fill_value=0 ganti semua NaN jadi nol. NaN muncul kalau kombinasi cabang dan kategori tertentu gak punya transaksi. Tanpa ini, tabelmu bolong dan susah dihitung lanjut.
margins=True nambahin baris dan kolom total di pinggir, persis Grand Total di Excel. margins_name ngasih nama barisnya.
Bisa gak pakai beberapa fungsi agregasi sekaligus?
Bisa, dan ini yang bikin pivot_table lebih kuat dari pivot Excel biasa. Kasih aggfunc berupa list.
pivot = df.pivot_table(
index="cabang",
values="total",
aggfunc=["sum", "mean", "count"]
)
Hasilnya tiga kolom: total penjualan, rata-rata per transaksi, dan jumlah transaksi per cabang. Satu tabel, tiga sudut.
Kalau tiap kolom nilai butuh fungsi beda, pakai dict:
pivot = df.pivot_table(
index="cabang",
values=["total", "qty"],
aggfunc={"total": "sum", "qty": "mean"}
)
Total dijumlah, qty dirata-rata. Fleksibel banget buat laporan yang campur metrik.
Contoh kasus: penjualan toko_berkah
Dataset toko_berkah punya 8.412 baris transaksi dari 6 cabang dan 5 kategori, periode Januari sampai Juni 2026. Aku bikin pivot omzet per cabang per kategori.
pivot = df.pivot_table(
index="cabang",
columns="kategori",
values="total",
aggfunc="sum",
fill_value=0,
margins=True,
margins_name="Total"
)
Dari tabel hasilnya, satu angka langsung nyolok: cabang Depok nyumbang Rp 398 juta atau 31% dari total omzet Rp 1,28 miliar, padahal cuma satu dari enam cabang. Kategori sembako dominan di semua cabang, tapi di Depok kategori elektronik ikut gede, hal yang gak kejadian di cabang lain.
Yang bikin pivot_table menang di sini: begitu ada export data bulan Juli, aku tinggal jalanin ulang skrip yang sama. Nol klik, tabel baru langsung jadi. Di Excel, aku harus refresh dan cek range tiap kali. Alur kerja terstruktur kayak gini bagian dari kerangka CRISP-DM yang aku pakai buat proyek data.
Kesalahan umum pakai pivot_table
Lupa fill_value, tabel penuh NaN. Sel kosong bikin kolom jadi tipe float dan susah dihitung. Selalu kasih fill_value=0 buat data hitungan.
Salah pilih aggfunc. Default-nya mean, bukan sum. Kalau kamu ngarep total tapi lupa set aggfunc, angkanya jadi rata-rata. Selalu tulis eksplisit.
index dan columns ketuker. Hasilnya jadi transpose dari yang kamu mau. Cek: index itu label baris, columns itu header kolom.
Pakai kolom yang banyak nilai unik sebagai columns. Kalau kategorimu ada 200 nilai unik, tabelnya jadi 200 kolom dan gak kebaca. Pakai kolom kategori yang jumlahnya wajar.
FAQ
Apa itu pivot_table di pandas?
pivot_table adalah metode pandas buat meringkas DataFrame jadi tabel silang. Kamu tentuin kolom mana jadi baris (index), kolom mana jadi kolom (columns), nilai apa yang dihitung (values), dan cara ngitungnya (aggfunc). Hasilnya mirip pivot table Excel: rapi, berupa matriks, dan gampang dibaca. Bedanya, ini kode yang bisa kamu jalankan ulang tiap ada data baru tanpa klik-klik manual.
Apa beda pivot_table dan groupby di pandas?
Dua-duanya ngeringkes data, tapi bentuk hasilnya beda. groupby balikin hasil dalam format panjang (satu kolom nilai per baris grup). pivot_table nyusun hasil jadi matriks dua dimensi dengan baris dan kolom silang, jadi lebih enak dibaca kayak laporan. Buat perbandingan antar kategori dalam satu tampilan, pivot_table lebih cepat kebaca. Buat pipeline lanjutan, groupby kadang lebih fleksibel.
Gimana cara nambah subtotal di pivot_table pandas?
Pakai argumen margins=True. Ini nambahin baris dan kolom total di pinggir tabel, mirip Grand Total di pivot Excel. Kamu juga bisa kasih nama lewat margins_name, misalnya margins_name='Total'. Hasilnya tiap baris dan kolom punya subtotal, plus satu angka total keseluruhan di pojok. Berguna buat laporan yang butuh angka ringkasan tanpa hitung terpisah.
Kenapa muncul NaN di hasil pivot_table?
NaN muncul kalau kombinasi baris dan kolom tertentu gak punya data. Misalnya cabang Depok gak pernah jual kategori elektronik, sel silang itu kosong jadi NaN. Buat ganti jadi angka, pakai fill_value=0 di dalam pivot_table. Ini bikin sel kosong jadi nol, jadi tabelnya rapi dan aman buat dihitung lebih lanjut tanpa error.
Bisa gak pivot_table pakai beberapa fungsi agregasi sekaligus?
Bisa. Kasih aggfunc berupa list, misalnya aggfunc=['sum', 'mean', 'count']. Hasilnya tiap nilai bakal punya kolom buat masing-masing fungsi. Kamu juga bisa kasih dict biar tiap kolom values pakai fungsi beda, misalnya {'total': 'sum', 'qty': 'mean'}. Ini bikin satu pivot bisa nampilin beberapa sudut pandang data sekaligus.
Penutup
Ringkasnya:
- Tentuin index, columns, values, dan aggfunc. Itu tulang punggung tiap pivot_table.
- Pakai
fill_value=0danmargins=Truebiar tabelnya siap jadi laporan. - aggfunc bisa list atau dict buat nampilin banyak metrik sekaligus.
Buka dataset kamu, panggil df.pivot_table(index="...", values="...", aggfunc="sum"), dan lihat ringkasan pertamamu jadi dalam sedetik. Ganti-ganti index-nya buat lihat data dari sudut lain.
Mau ngerti konsep DataFrame lebih dalam? Cek glossary DataFrame. Dokumentasi resmi pivot_table ada di situs pandas.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
NumPy reshape: Ubah Bentuk Array (2026)
Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.
Alternatif iterrows yang Lebih Cepat di Pandas
iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.