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.
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.
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()
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.
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.
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.
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.
Pertanyaan yang sering muncul soal groupby 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.
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.
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, 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.
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.
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.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.
Cara pakai pandas crosstab buat bikin tabel silang yang menghitung frekuensi antar dua kategori. Contoh analisis kategori produk per kota UMKM.