Tahap apply dari split-apply-combine bergantung sepenuhnya pada fungsi yang kita terapkan ke setiap kelompok. pandas menyediakan belasan fungsi agregasi bawaan yang bisa dipanggil sebagai method setelah groupby(), dari sum() dan mean() hingga nunique(). Chapter ini memetakan fungsi-fungsi yang paling sering dipakai, mencobanya pada dataset transaksi toko, lalu membahas dua perbedaan yang sering membingungkan pemula: count() versus size(), serta perilaku sum() pada kolom teks. Semua contoh memakai 12 transaksi yang sama sehingga setiap angka bisa dicek dengan tangan.
Fungsi Agregasi Bawaan yang Sering Dipakai #
Tabel berikut merangkum method agregasi yang paling sering dipakai.
| Method | Hasil per kelompok | Contoh pertanyaan bisnis |
|---|---|---|
sum() | jumlah nilai | berapa omzet tiap kota |
mean() | rata-rata | berapa nilai transaksi rata-rata |
median() | nilai tengah | transaksi tipikal tiap kota |
min() / max() | nilai terkecil / terbesar | transaksi terkecil dan terbesar |
count() | banyaknya nilai non-NaN | berapa transaksi tercatat lengkap |
size() | banyaknya baris | berapa baris per kelompok |
std() / var() | simpangan baku / varians | seberapa bervariasi nilai transaksi |
nunique() | banyaknya nilai unik | berapa produk berbeda per kota |
Semua method pada tabel bekerja per kelompok: pandas memanggil fungsi itu pada setiap potongan data lalu menyatukan hasilnya berdasarkan kunci kelompok. Untuk kolom numerik, sum(), mean(), median(), min(), max(), std(), dan var() mengembalikan angka seperti yang diharapkan. Untuk kolom teks bertipe str pada pandas 3.0, method tanpa aritmetika seperti count() dan nunique() tetap berjalan normal; perubahan tipe string dirangkum resmi di halaman migrasi string
. Fungsi yang butuh aritmetika justru berperilaku berbeda pada teks, dan kasus itu dibahas di bagian akhir chapter.
Mencoba Fungsi Agregasi pada Dataset Transaksi #
Script berikut menghitung enam agregasi pada kolom total, mencoba nunique() pada kolom produk, membandingkan size() dengan count(), lalu mencoba sum() pada kolom teks.
import pandas as pd
transaksi = pd.DataFrame({
"kota": ["Jakarta", "Jakarta", "Jakarta", "Jakarta",
"Bandung", "Bandung", "Bandung", "Bandung",
"Surabaya", "Surabaya", "Surabaya", "Surabaya"],
"kategori": ["Minuman", "Minuman", "Makanan", "Sembako",
"Minuman", "Makanan", "Sembako", "Makanan",
"Minuman", "Sembako", "Makanan", "Minuman"],
"produk": ["Kopi Gayo", "Teh Melati", "Roti Tawar", "Beras Premium",
"Kopi Gayo", "Roti Tawar", "Beras Premium", "Mie Instan",
"Teh Melati", "Beras Premium", "Mie Instan", "Kopi Gayo"],
"jumlah": [3, 2, 4, 1, 5, 2, 3, 10, 6, 2, 8, 1],
"harga": [18000, 12000, 15000, 68000, 18000, 15000, 68000, 3500,
12000, 68000, 3500, 18000],
"total": [54000, 24000, 60000, 68000, 90000, 30000, 204000, 35000,
72000, 136000, 28000, 18000],
})
g = transaksi.groupby("kota")["total"]
print("sum ->", g.sum().tolist())
print("mean ->", g.mean().tolist())
print("count ->", g.count().tolist())
print("min ->", g.min().tolist())
print("max ->", g.max().tolist())
print("median->", g.median().tolist())
print()
print("nunique() produk per kota:")
print(transaksi.groupby("kota")["produk"].nunique())
print()
print("size() vs count() per kota:")
print(transaksi.groupby("kota").size().rename("size"))
print(g.count().rename("count"))
print()
print("sum() pada kolom str menggabungkan teks:")
print(transaksi.groupby("kota")["kategori"].sum())Output yang Dihasilkan:
sum -> [359000, 206000, 254000]
mean -> [89750.0, 51500.0, 63500.0]
count -> [4, 4, 4]
min -> [30000, 24000, 18000]
max -> [204000, 68000, 136000]
median-> [62500.0, 57000.0, 50000.0]
nunique() produk per kota:
kota
Bandung 4
Jakarta 4
Surabaya 4
Name: produk, dtype: int64
size() vs count() per kota:
kota
Bandung 4
Jakarta 4
Surabaya 4
Name: size, dtype: int64
kota
Bandung 4
Jakarta 4
Surabaya 4
Name: count, dtype: int64
sum() pada kolom str menggabungkan teks:
kota
Bandung MinumanMakananSembakoMakanan
Jakarta MinumanMinumanMakananSembako
Surabaya MinumanSembakoMakananMinuman
Name: kategori, dtype: strMari kita bedah baris-baris penting script di atas:
- Baris 20:
gadalah objekSeriesGroupByuntuk kolomtotal; satu objek dipakai ulang untuk enam method berbeda. - Baris 22-27: setiap baris memanggil satu method agregasi, lalu
.tolist()mengubah hasilnya menjadi list Python agar output ringkas. - Baris 30-31:
nunique()dijalankan pada kolomprodukbertipestrdan melaporkan empat produk berbeda di tiap kota. - Baris 34-36:
size()dihitung dari objek DataFrame groupby, sedangkancount()dihitung darig;.rename()memberi label agar keduanya tidak tertukar. - Baris 39-40: percobaan
sum()pada kolomkategorimenampilkan perilaku tak terduga yang dibahas di bawah.
Perbedaan count() dan size() #
Kedua method sama-sama menghitung, tetapi benda yang dihitungnya berbeda. size() menghitung baris pada kelompok tanpa memandang isi kolom mana pun. count() menghitung nilai yang bukan NaN pada kolom yang dipilih, sehingga hasilnya bisa lebih kecil bila ada sel kosong. Dataset transaksi kita tidak berisi nilai kosong, itulah sebabnya kedua output sama persis. Begitu data nyata punya sel kosong, kedua method ini berpisah arah, dan chapter tentang groupby dan missing values pada Section ini membahasnya lebih dalam.
Hati-hati dengan sum() pada Kolom Teks #
Baris terakhir output menunjukkan kejanggalan: sum() pada kolom kategori tidak menghasilkan angka, melainkan teks yang menempel satu sama lain seperti MinumanMakananSembakoMakanan. Penyebabnya, pandas menerapkan penjumlahan pada apa pun yang berada di kolom tersebut, dan untuk string penjumlahan berarti penggabungan teks (concatenation). Perilaku ini sah secara internal, tetapi hasilnya nyaris tidak berguna untuk laporan. Solusinya disiplin memilih kolom: sebut kolom numerik secara eksplisit seperti g["total"].sum(), dan serahkan analisis teks pada fungsi yang memang dirancang untuknya seperti nunique().
Fungsi bawaan mengcover sebagian besar kebutuhan, tetapi satu method hanya menghasilkan satu jenis ringkasan per panggilan. Sering kali kita butuh omzet, rata-rata, dan banyaknya transaksi dalam satu tabel yang sama. Chapter berikutnya memperkenalkan agg(), method yang menerapkan beberapa fungsi sekaligus pada satu kolom maupun beberapa kolom. Detail setiap method bisa Anda lacak di user guide groupby
resmi pandas.