Pandas pivot_table: Buat Pivot di Python (2026)
Blog/Tips & Trik/Pandas pivot_table: Buat Pivot di Python (2026)

Pandas pivot_table: Buat Pivot di Python (2026)

BimaBima
·26 Juli 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

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 baris
  • columns: kolom yang jadi header kolom
  • values: kolom angka yang dihitung
  • aggfunc: 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.

Aspekgroupbypivot_table
Bentuk hasilPanjang (long)Matriks (wide)
SubtotalManualmargins=True
Sel kosongGak munculNaN, bisa diisi
Enak dibacaBuat pipelineBuat 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=0 dan margins=True biar 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.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

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.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

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.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

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.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore