Pandas groupby agg: Banyak Agregasi Sekaligus
TL;DR
Method agg di pandas dipakai buat ngitung banyak agregasi sekaligus setelah groupby, misalnya total, rata-rata, dan jumlah baris dalam satu perintah. Cara paling rapi pakai named aggregation, formatnya nama_kolom_baru=('kolom_sumber', 'fungsi'). Pendekatan ini bikin hasil langsung punya nama kolom yang jelas, tanpa MultiIndex yang ribet.
Method agg di pandas dipakai buat ngitung banyak agregasi sekaligus setelah groupby, misalnya total, rata-rata, dan jumlah transaksi per kota dalam satu perintah.
Kalau kamu masih nulis groupby berkali-kali buat tiap ringkasan, ada cara yang jauh lebih ringkas. agg nampung semua perhitungan dalam satu panggilan, dan hasilnya langsung berupa tabel rapi.
Di artikel ini kamu bakal belajar named aggregation, cara pasang banyak fungsi ke satu kolom, dan contoh nyata dari data penjualan UMKM.
Apa itu agg di pandas groupby?
agg adalah method yang ngejalanin satu atau banyak fungsi agregasi ke tiap grup hasil groupby. Fungsi agregasi itu perhitungan yang ngeringkas banyak baris jadi satu angka, kayak sum, mean, count, min, atau max. Dengan agg, kamu bisa gabungin beberapa perhitungan itu dalam satu langkah.
Konsepnya sama kayak agregasi di SQL: kelompokkan dulu, baru hitung ringkasan per kelompok. Bedanya, pandas agg ngasih kamu kontrol penuh atas nama kolom hasilnya. Kalau kamu baru mulai dengan groupby, baca dulu dasar pandas groupby biar nyambung.
Gimana cara pakai named aggregation?
Named aggregation adalah cara paling rapi dan disarankan sejak pandas 0.25. Formatnya: tiap argumen berupa nama_kolom_baru sama dengan tuple (kolom_sumber, fungsi). Hasilnya DataFrame dengan nama kolom yang kamu tentuin sendiri.
import pandas as pd
ringkasan = df.groupby('kota').agg(
total_belanja=('nominal', 'sum'),
rata_belanja=('nominal', 'mean'),
jumlah_transaksi=('order_id', 'count')
)
print(ringkasan)
Tiap baris hasil adalah satu kota, dan tiga kolomnya persis nama yang kamu kasih. Nggak ada MultiIndex, nggak perlu rename lagi setelahnya. Ini keunggulan utama named aggregation dibanding cara lama.
Gimana cara pasang banyak fungsi ke satu kolom?
Kalau kamu mau beberapa perhitungan dari kolom yang sama, kamu bisa oper daftar fungsi ke agg. Cara ini lebih ringkas tapi hasilnya pakai MultiIndex di kolom, jadi butuh sedikit perapian.
ringkasan = df.groupby('kota')['nominal'].agg(['sum', 'mean', 'max', 'count'])
print(ringkasan)
Hasilnya empat kolom: sum, mean, max, dan count, semuanya dari kolom nominal. Kalau nama fungsi default kurang jelas, kamu bisa ratakan kolomnya biar gampang dibaca:
ringkasan.columns = ['total', 'rata', 'tertinggi', 'jumlah']
Gimana cara pakai fungsi custom di agg?
Selain fungsi bawaan, kamu bisa oper fungsi buatan sendiri lewat lambda. Ini berguna buat perhitungan yang nggak ada versi bawaannya, misalnya selisih nilai tertinggi dan terendah per grup.
ringkasan = df.groupby('kota').agg(
rentang=('nominal', lambda x: x.max() - x.min()),
median=('nominal', 'median')
)
lambda x itu fungsi kecil yang nerima nilai satu grup, lalu balikin satu angka. Di sini dia ngitung selisih max dan min. Fungsi custom bikin agg fleksibel buat kebutuhan yang spesifik.
Contoh kasus: ringkasan penjualan toko_berkah
Aku pakai dataset toko_berkah, data penjualan UMKM dengan 4 cabang di kota berbeda dan 2.800 baris transaksi selama satu kuartal. Aku mau satu tabel ringkasan per kota.
ringkasan = df.groupby('kota').agg(
total_omzet=('nominal', 'sum'),
rata_transaksi=('nominal', 'mean'),
jumlah_transaksi=('order_id', 'count')
).sort_values('total_omzet', ascending=False)
print(ringkasan)
Hasilnya nunjukin pola menarik. Cabang Bandung punya jumlah transaksi terbanyak (912 transaksi), tapi rata-rata belanjanya paling kecil, cuma Rp 47.300. Cabang Surabaya transaksinya lebih sedikit (610), tapi rata-rata belanja Rp 78.500, 66% lebih tinggi dari Bandung.
Insight ini nggak bakal kelihatan kalau cuma lihat total omzet. Bandung ramai tapi nilai kecil, Surabaya sepi tapi nilai besar. Strategi promonya jelas beda buat tiap cabang.
Kesalahan umum pakai agg
- Kaget sama MultiIndex. Cara pasang list fungsi bikin kolom bertingkat. Kalau bikin pusing, pindah ke named aggregation.
- Salah pilih count. count nggak ngitung nilai kosong. Kalau kamu mau semua baris termasuk yang null, pakai size.
- Nulis nama fungsi salah ketik. 'means' bukan fungsi, yang bener 'mean'. pandas bakal ngasih error.
- Lupa reset_index. Kolom grup jadi index. Kalau kamu butuh dia sebagai kolom biasa, tambahin .reset_index() di akhir.
FAQ
Pertanyaan yang sering muncul soal groupby agg di pandas.
Penutup
agg bikin kamu ngerangkum data dalam satu perintah, bukan groupby berulang. Buat hasil yang paling rapi, pakai named aggregation dengan format nama_baru=('kolom', 'fungsi'). Buat perhitungan yang nggak ada bawaannya, oper lambda.
Sekali kamu terbiasa, bikin tabel ringkasan jadi kerjaan lima detik. Mau lanjut ke bentuk pivot? Baca pandas pivot_table buat susun ringkasan dua dimensi. Detail lengkap methodnya ada di dokumentasi resmi pandas agg. Mau latihan pandas terstruktur? Kulik materinya di NgulikData.
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.