Penjelasan sederhana
Bayangkan semua baris dipilah ke beberapa keranjang sesuai kategori, lalu isi tiap keranjang dijumlah. Ini cara kerja PivotTable di Excel dan GROUP BY di SQL.
Sintaks
df.groupby('kolom')['nilai'].sum()
| Bagian | Keterangan |
|---|---|
'kolom' | Kolom pengelompok. Bisa daftar untuk beberapa level. |
['nilai'] | Kolom yang diringkas. |
sum(), mean(), count(), max(), min() | Fungsi ringkasan. |
df adalah nama DataFrame (tabel) yang sedang diolah. Contoh di bawah memakai import pandas as pd dan import numpy as np, yang sudah disiapkan otomatis.
Contoh groupby()
Data contoh: penjualan (sudah tersedia sebagai DataFrame)
DataFrame penjualan
| id | tanggal | karyawan_id | produk | kategori | qty | harga |
|---|---|---|---|---|---|---|
| 1 | 2026-01-05 | 4 | Laptop | Elektronik | 2 | 8500000 |
| 2 | 2026-01-12 | 6 | Printer | Elektronik | 1 | 2300000 |
| 3 | 2026-01-20 | 4 | Kursi Kantor | Furnitur | 5 | 1200000 |
| 4 | 2026-02-03 | 6 | Laptop | Elektronik | 1 | 8500000 |
| 5 | 2026-02-14 | 4 | Meja Kerja | Furnitur | 3 | 1750000 |
| 6 | 2026-02-25 | 5 | Kertas A4 | ATK | 20 | 55000 |
| 7 | 2026-03-02 | 6 | Kursi Kantor | Furnitur | 4 | 1200000 |
| 8 | 2026-03-10 | 4 | Printer | Elektronik | 2 | 2300000 |
| 9 | 2026-03-18 | 5 | Kertas A4 | ATK | 30 | 55000 |
| 10 | 2026-03-27 | 6 | Monitor | Elektronik | 3 | 1900000 |
penjualan['omzet'] = penjualan['qty'] * penjualan['harga']
penjualan.groupby('kategori')['omzet'].sum().sort_values(ascending=False)
Hasil 3 baris × 1 kolom
| kategori | omzet |
|---|---|
| Elektronik | 38100000 |
| Furnitur | 16050000 |
| ATK | 2750000 |
Elektronik menyumbang omzet terbesar, disusul Furnitur, lalu ATK.
Cara kerjanya, langkah demi langkah
- Kolom omzet dihitung dulu.
groupby('kategori')membagi baris ke kelompok Elektronik, Furnitur, ATK.['omzet'].sum()menjumlah omzet tiap kelompok, lalu diurutkan dari yang terbesar.
Dipakai untuk apa di kantor?
- Omzet per cabang, jumlah karyawan per divisi, rata-rata nilai per kelas.
- Langkah awal hampir semua laporan rekap.
Kesalahan yang sering terjadi
- Lupa memilih kolom nilai, sehingga Pandas mencoba menjumlah semua kolom termasuk teks.
- Bingung karena kolom pengelompok pindah jadi index. Pakai
as_index=Falseataureset_index().
agg()