Pandas groupby: Agregasi Data ala Pivot di Python (2026)
TL;DR
Method groupby di pandas ngelompokin baris DataFrame berdasarkan nilai satu kolom atau lebih, lalu ngitung agregasi per grup kayak sum, mean, atau count. Pola dasarnya df.groupby('kolom')['angka'].sum(). Cara kerjanya split, apply, combine, dan hasilnya mirip pivot table tapi lewat kode.
Method groupby di pandas ngelompokin baris berdasarkan nilai satu kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini padanan pivot table, tapi lewat kode.
Tiap kali kamu pengin jawab pertanyaan 'total penjualan per kota berapa' atau 'rata-rata order per pelanggan gimana', groupby yang ngerjain.
Di artikel ini kamu bakal ngerti cara kerjanya, cara ngitung beberapa agregasi sekaligus, contoh nyata pakai data toko, plus kesalahan yang bikin hasilnya keliatan aneh.
Apa itu groupby di pandas?
groupby adalah method DataFrame yang misahin data jadi grup berdasarkan nilai kolom, lalu nerapin fungsi hitung ke tiap grup. Cara kerjanya tiga tahap: split (pisah data per grup), apply (hitung agregasi tiap grup), combine (gabung hasilnya jadi satu tabel).
Kamu nggak perlu ngurus tiga tahap itu manual. pandas ngejalanin semuanya begitu kamu nulis satu baris groupby.
Gimana cara pakai groupby?
Pola dasarnya: pilih kolom pengelompok, pilih kolom angka, terus panggil fungsi agregasi. Anggap kamu punya DataFrame df dengan kolom kota dan nominal.
import pandas as pd
hasil = df.groupby('kota')['nominal'].sum()
print(hasil)
Baris itu ngelompokin data per kota, terus jumlahin nominal tiap kota. Hasilnya satu angka total per kota. Kalau kamu ganti sum jadi mean, kamu dapet rata-rata. Ganti jadi count, kamu dapet jumlah baris per kota.
Satu hal yang sering bikin bingung pemula: kolom kota berubah jadi index di hasil. Buat balikin jadi kolom biasa, tambahin reset_index.
hasil = df.groupby('kota')['nominal'].sum().reset_index()
Gimana cara pakai beberapa agregasi sekaligus?
Sering kali satu ringkasan nggak cukup. Kamu mau total, rata-rata, dan jumlah transaksi dalam satu tabel. Pakai method agg dan kasih daftar fungsi.
hasil = df.groupby('kota')['nominal'].agg(['sum', 'mean', 'count'])
Hasilnya tiga kolom sekaligus per kota: total, rata-rata, dan banyaknya baris. Biar nama kolomnya langsung jelas, kamu bisa kasih nama sendiri.
hasil = df.groupby('kota').agg(
total_omzet=('nominal', 'sum'),
rata_order=('nominal', 'mean'),
jumlah_transaksi=('nominal', 'count')
).reset_index()
Cara ini disebut named aggregation. Hasil kolomnya jadi total_omzet, rata_order, dan jumlah_transaksi, bukan nama fungsi mentah yang bikin orang lain nebak-nebak.
Groupby lebih dari satu kolom
Kamu bisa ngelompokin berdasarkan beberapa kolom sekaligus. Tinggal kasih daftar kolom di dalam groupby.
hasil = df.groupby(['kota', 'kategori'])['nominal'].sum().reset_index()
Sekarang tiap baris hasil adalah satu kombinasi kota dan kategori. Cocok kalau kamu mau ringkasan yang lebih rinci, misalnya total penjualan per kota per kategori produk.
Contoh kasus: ringkasan penjualan toko_berkah
Anggap kamu ngolah data transaksi toko_berkah, UMKM sembako yang punya cabang di Bandung, Cimahi, dan Garut. Ada 4.100 baris transaksi dengan kolom cabang, kategori, dan nominal.
Pemiliknya mau tahu performa tiap cabang.
ringkasan = df.groupby('cabang').agg(
total_omzet=('nominal', 'sum'),
rata_transaksi=('nominal', 'mean')
).reset_index()
Dari sampel data ngulikdata, cabang Bandung nyumbang Rp 96.200.000 dengan rata-rata Rp 42.000 per transaksi, sementara Garut cuma Rp 21.300.000 tapi rata-ratanya lebih tinggi di Rp 58.000. Artinya Garut transaksinya lebih sedikit tapi nilainya lebih gede per belanja.
Pola kayak gini susah ketangkep kalau cuma lihat total. Begitu dipecah pakai groupby, arah strateginya jadi lebih jelas: Garut cocok buat produk bernilai tinggi. Buat ngeekspor hasil ini ke Excel, lanjut ke pandas to_excel.
Kesalahan umum pakai groupby
Lupa reset_index. Tanpa reset_index, kolom pengelompok jadi index dan hasilnya susah diolah lagi atau diekspor. Biasakan tambahin di ujung, atau pakai as_index=False.
Nggak milih kolom angka. Kalau kamu panggil sum ke seluruh DataFrame tanpa milih kolom, pandas ngabaikan kolom teks dan kadang hasilnya nggak sesuai harapan. Pilih kolom angka secara eksplisit biar terkontrol.
Nyampur groupby sama pivot_table tanpa sadar bedanya. Kalau kamu butuh tabel silang dua dimensi, pivot_table lebih pas. Detail lengkap method groupby ada di dokumentasi resmi pandas.
FAQ
Pertanyaan yang sering muncul soal groupby di pandas.
Apa bedanya groupby sama pivot_table di pandas?
Keduanya sama-sama ngeringkas data per grup, tapi bentuk hasilnya beda. groupby ngasih hasil memanjang ke bawah dan lebih fleksibel buat agregasi rumit. pivot_table langsung ngasih bentuk lebar dengan baris dan kolom silang, mirip pivot table Excel. Kalau kamu butuh tabel silang dua dimensi, pivot_table lebih praktis.
Kenapa kolom pengelompok jadi index setelah groupby?
Secara default, pandas naruh kolom yang dipakai ngelompokin sebagai index hasil. Itu kadang bikin repot waktu mau diolah lagi atau diekspor. Tambahin reset_index() di ujung buat balikin kolom itu jadi kolom biasa. Atau, kasih argumen as_index=False di dalam groupby biar langsung rapi dari awal.
Gimana cara pakai beberapa fungsi agregasi sekaligus?
Pakai method agg dan kasih daftar fungsi. Contoh df.groupby('kota')['nominal'].agg(['sum', 'mean', 'count']) ngasih tiga kolom hasil sekaligus per kota. Kamu juga bisa kasih nama kolom custom pakai sintaks named aggregation, jadi hasil kolomnya langsung jelas maksudnya, bukan sekadar 'sum' atau 'mean'.
Bisa nggak groupby berdasarkan lebih dari satu kolom?
Bisa, tinggal kasih daftar kolom di dalam groupby, contoh df.groupby(['kota', 'kategori']). Hasilnya dikelompokin per kombinasi kota dan kategori. Ini berguna kalau kamu mau ringkasan yang lebih detail, misalnya total penjualan per kota per kategori dalam satu tabel. Hasilnya bakal punya index bertingkat.
Kenapa hasil groupby kolom teksnya hilang?
Waktu kamu manggil agregasi numerik kayak sum atau mean tanpa milih kolom, pandas cuma ngitung kolom yang bisa dijumlah dan ngabaikan kolom teks. Kalau kamu butuh kolom teks tetap ada, pilih kolom secara eksplisit atau pakai fungsi yang cocok buat teks kayak count. Milih kolom di awal bikin hasilnya lebih terkontrol.
Penutup
groupby intinya split, apply, combine: pisah data per grup, hitung agregasinya, gabung jadi tabel. Buat ringkasan yang lebih dari satu angka, pakai agg dengan named aggregation biar hasil kolomnya langsung kebaca maksudnya.
Mau bentuk tabel silang ala pivot Excel? Cek pandas pivot_table. Udah selesai ngeringkas dan mau kirim hasilnya? Baca pandas to_excel.
Pengin lancar olah data dari mentah sampai insight siap presentasi? Kulik studi kasus data Indonesia di NgulikData biar kamu terbiasa sama alur kerja analis beneran.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
NumPy random: Membuat Data Acak untuk Simulasi
NumPy random bikin angka acak buat simulasi dan data dummy. Ini cara pakai default_rng, atur seed, dan generate sampel yang bisa diulang.
NumPy where: Operasi Bersyarat pada Array
np.where milih nilai berdasarkan kondisi ke seluruh array sekaligus, tanpa loop. Ini cara pakainya buat kolom bersyarat dan cari posisi elemen.
NumPy Broadcasting: Operasi Array Beda Ukuran (2026)
Broadcasting bikin NumPy bisa ngoperasiin array beda ukuran tanpa loop. Ini aturan bentuknya dan contoh pakai data nyata.