Method agregat seperti sum() meringkas seluruh kolom menjadi satu angka akhir. Kadang kita justru butuh jejak perjalanan menuju angka tersebut: total berjalan per hari untuk memantau target bulanan, rekor tertinggi sementara, atau titik terendah yang pernah tercatat. Keluarga method kumulatif pandas, yaitu cumsum(), cummax(), dan cummin(), menjawab kebutuhan itu dengan mempertahankan panjang data. Pada Chapter ini kita menghitung ketiganya pada data penjualan es krim selama satu minggu.

Tiga Method Kumulatif Bawaan pandas #

Setiap method kumulatif memproses data berurutan dari baris pertama dan menyimpan lariannya di setiap posisi:

  • cumsum(): jumlah berjalan; nilai pada posisi ke-n adalah penjumlahan semua nilai dari awal sampai posisi tersebut.
  • cummax(): rekor berjalan; nilai tertinggi yang pernah tercatat dari awal sampai posisi tersebut.
  • cummin(): titik terendah berjalan; nilai terendah yang pernah tercatat dari awal sampai posisi tersebut.

Berbeda dengan sum() yang mengembalikan satu angka, hasil method kumulatif tetap sepanjang data aslinya. Bila input berupa Series, hasilnya Series; bila input berupa DataFrame, hasilnya DataFrame dengan ukuran sama. Sifat inilah yang membuat hasil kumulatif nyaman disisipkan sebagai kolom baru di samping data mentahnya.

Menghitung Total Berjalan Satu Minggu #

Kita memakai catatan gelas es krim yang terjual dari Senin sampai Minggu. Kolom gelas berisi penjualan harian, dan kita tambahkan tiga kolom hasil kumulatif agar ketiga method terlihat berdampingan.

python
import pandas as pd

mingguan = pd.DataFrame({
    "hari": ["Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
    "gelas": [120, 98, 135, 110, 150, 210, 175],
}).set_index("hari")

mingguan["total_berjalan"] = mingguan["gelas"].cumsum()
mingguan["rekor_berjalan"] = mingguan["gelas"].cummax()
mingguan["terendah_berjalan"] = mingguan["gelas"].cummin()

print(mingguan)

Output yang Dihasilkan:

text
        gelas  total_berjalan  rekor_berjalan  terendah_berjalan
hari                                                            
Senin     120             120             120                120
Selasa     98             218             120                 98
Rabu      135             353             135                 98
Kamis     110             463             135                 98
Jumat     150             613             150                 98
Sabtu     210             823             210                 98
Minggu    175             998             210                 98

Mari kita bedah kode di atas:

  1. Baris 3-6: kita membangun DataFrame dan langsung menjadikan kolom hari sebagai index melalui set_index("hari"), sehingga setiap baris berlabel nama hari.
  2. Baris 8 (mingguan["total_berjalan"] = ...): cumsum() menumpuk penjualan; pada Selasa hasilnya 218 karena 120 + 98, pada Rabu menjadi 353, dan seterusnya hingga 998 di akhir minggu.
  3. Baris 9 (mingguan["rekor_berjalan"] = ...): cummax() menyimpan rekor tertinggi; nilai 120 bertahan pada Selasa karena 98 lebih kecil, lalu digantikan 135 di Rabu, 150 di Jumat, dan 210 di Sabtu.
  4. Baris 10 (mingguan["terendah_berjalan"] = ...): cummin() menyimpan titik terendah; nilai 120 turun menjadi 98 di Selasa dan tidak pernah naik lagi, karena method ini hanya menyimpan nilai terkecil yang pernah lewat.
  5. Baris 12: kita mencetak seluruh tabel untuk melihat ketiga kolom kumulatif di samping data mentah.

Pola di kolom rekor_berjalan dan terendah_berjalan mudah dikenali: keduanya bergerak naik atau turun satu kali saja ketika rekor baru muncul, lalu membeku. Kolom total_berjalan selalu naik untuk data positif dan berakhir sama dengan hasil mingguan["gelas"].sum(). Dengan kolom semacam ini, pertanyaan seperti “kapan total mingguan menyentuh 1000 gelas” langsung terjawab: Sabtu mencatat 823 dan Minggu baru mencapai 998, sehingga target 1000 belum tersentuh minggu ini.

Hati-hati pada Kolom Teks #

Cara paling sederhana untuk menghindari keliru arah adalah memilih kolom secara eksplisit seperti pola mingguan["gelas"].cumsum() di atas. Dokumentasi pandas.Series.cumsum , pandas.Series.cummax , dan pandas.Series.cummin merinci perilaku ketiga method ini, termasuk perlakuan terhadap nilai NaN yang dilewatkan tanpa memutus rantai perhitungan.

Operasi kumulatif bekerja baik pada kolom numerik yang punya urutan alami. Ketika data kita berisi kategori alih-alih angka, pertanyaan analisisnya berubah bentuk: kategori mana yang paling sering muncul dan seberapa besar porsinya? Chapter berikutnya menjawabnya dengan value_counts().