Materi
groupby dengan satu kolom memberi daftar, padahal banyak pertanyaan kerja butuh tabel dua arah, misalnya omzet per cabang per bulan. df.pivot_table(index=..., columns=..., values=..., aggfunc=...) menyusunnya seperti PivotTable di Excel: nilai index menjadi baris, nilai columns menjadi kolom, dan setiap sel berisi ringkasan values. Berbeda dari pivot di modul 2, pivot_table meringkas pasangan yang muncul lebih dari sekali, sehingga tidak berhenti dengan error.
absen = pd.DataFrame({
"unit": ["Gudang", "Gudang", "Kasir", "Kasir", "Gudang"],
"hari": ["Sen", "Sel", "Sen", "Sen", "Sen"],
"telat": [10, 5, 0, 15, 20],
})
print(absen.pivot_table(index="unit", columns="hari", values="telat", aggfunc="sum", fill_value=0))
print(pd.crosstab(absen["unit"], absen["hari"]))aggfunc bawaan pivot_table adalah mean, bukan sum. Kombinasi yang tidak punya data menghasilkan NaN; fill_value=0 menggantinya, dan margins=True menambah baris dan kolom All berisi ringkasan seluruh data.
pd.crosstab(kolom_a, kolom_b) menghitung banyaknya baris untuk setiap pasangan nilai, yaitu tabel frekuensi. Argumennya kolom (Series), bukan nama kolom. normalize="index" membagi setiap sel dengan total barisnya, sehingga setiap baris berjumlah 1 dan cabang yang transaksinya sedikit bisa dibandingkan dengan cabang besar.