Pandas cumsum: Running Total di Python
TL;DR
Pandas cumsum ngitung running total, yaitu jumlah berjalan yang nambah nilai tiap baris ke total baris sebelumnya. Selain cumsum, ada cummax, cummin, dan cumprod buat maksimum, minimum, dan hasil kali berjalan. Buat data yang punya beberapa grup, pakai df.groupby(kolom)[nilai].cumsum() biar running total-nya reset di tiap grup dan nggak nyampur antar kategori.
cumsum di Pandas ngitung running total, jumlah berjalan yang nambah nilai tiap baris ke total baris sebelumnya. Satu baris kode, langsung dapat kolom saldo berjalan.
Kepakai di banyak laporan. Saldo kas harian, omzet kumulatif dari awal bulan, atau total pengeluaran yang nambah terus.
Aku bakal tunjukin cara pakainya, saudara-saudaranya kayak cummax dan cumprod, dan cara ngitung running total per grup biar nggak nyampur antar kategori.
Apa itu cumsum di Pandas?
cumsum, singkatan cumulative sum, ngitung jumlah berjalan sepanjang kolom. Baris pertama sama dengan nilainya sendiri. Baris kedua nilai pertama plus kedua. Baris ketiga tiga nilai pertama dijumlah, begitu seterusnya sampai baris terakhir yang totalnya sama dengan jumlah keseluruhan.
Hasilnya kolom sepanjang data asli, bukan satu angka. Ini beda dari sum yang cuma ngasih total akhir.
Gimana cara pakai cumsum?
df['saldo_berjalan'] = df['nilai'].cumsum()
Kolom baru berisi total yang nambah tiap baris. Contoh dengan angka:
| Hari | Pemasukan | cumsum |
|---|---|---|
| 1 | 100 | 100 |
| 2 | 150 | 250 |
| 3 | 80 | 330 |
| 4 | 120 | 450 |
Kolom cumsum nunjukin total sampai hari itu. Pastiin datanya udah terurut per tanggal dulu, karena cumsum ngikutin urutan baris apa adanya.
Apa beda cumsum, cummax, cummin, dan cumprod?
Semua berjalan baris demi baris, tapi operasinya beda.
- cumsum: jumlah berjalan.
- cummax: nilai tertinggi yang pernah muncul sampai baris itu.
- cummin: nilai terendah sampai baris itu.
- cumprod: hasil kali berjalan, buat pertumbuhan majemuk.
cummax berguna buat nyari rekor tertinggi berjalan, misalnya omzet harian terbaik sampai saat ini. cumprod dipakai waktu ngitung efek bunga berbunga dari deret pertumbuhan.
Gimana cara hitung running total per grup?
Kalau datamu punya beberapa grup, pakai groupby sebelum cumsum biar totalnya reset di tiap grup.
df['omzet_kumulatif'] = (
df.groupby('cabang')['omzet'].cumsum()
)
Tanpa groupby, running total terus nambah nyeberang antar cabang dan angkanya salah. Dengan groupby, tiap cabang punya jumlah berjalannya sendiri. Pola per grup ini mirip pandas transform buat hitung per grup yang tetap jaga jumlah barisnya.
Contoh kasus: saldo kas harian Toko Berkah
Toko Berkah, UMKM kelontong di dataset latihan ngulikdata, nyatat arus kas harian sepanjang 2025. Tiap baris berisi tanggal dan kas bersih hari itu, positif kalau surplus, negatif kalau tekor. Pemilik mau tau saldo kas berjalan biar tau kapan kas mepet.
df = df.sort_values('tanggal')
df['saldo'] = df['kas_bersih'].cumsum()
titik_terendah = df.nsmallest(1, 'saldo')
Hasilnya, saldo terendah jatuh di 18 Januari di angka Rp3.200.000, tepat sebelum belanja stok besar cair dari penjualan. Setelah dicek, tiap awal tahun kas selalu paling tipis karena stok Natal udah kepakai tapi pemasukan belum pulih. Pola ini yang bikin pemilik nyimpen dana cadangan minimal Rp5 juta buat lewatin dua minggu pertama Januari tanpa panik.
Buat lihat rekor pemasukan harian berjalan, tinggal ganti ke cummax.
df['rekor_omzet'] = df['omzet'].cummax()
Kesalahan umum saat pakai cumsum
1. Lupa ngurutin data dulu
cumsum ngikutin urutan baris apa adanya. Kalau tanggalnya acak, saldo berjalannya nggak bermakna. Selalu sort_values per tanggal sebelum cumsum.
2. Cumsum antar grup tanpa groupby
Data multi-cabang butuh groupby sebelum cumsum. Tanpa itu, total satu cabang kebawa ke cabang berikutnya dan angkanya salah diam-diam.
3. Nggak nyadar NaN bikin lubang
Default cumsum ngelewatin NaN, tapi baris itu tetap NaN di hasil. Kalau kamu mau NaN dianggap nol, isi dulu pakai fillna(0). Cek juga shift dan diff yang punya perilaku NaN mirip di baris pertama.
FAQ
Apa itu running total dan gimana cumsum ngitungnya?
Running total adalah jumlah berjalan yang nambah nilai tiap baris ke total baris-baris sebelumnya. Baris pertama sama dengan nilainya sendiri, baris kedua nilai pertama plus kedua, dan seterusnya. cumsum ngerjain ini otomatis: df['nilai'].cumsum() ngasih kolom baru berisi total berjalan. Ini dasar buat ngitung saldo kas atau omzet kumulatif dari awal periode.
Gimana cara hitung cumsum per grup di Pandas?
Pakai groupby sebelum cumsum. Contohnya df.groupby('cabang')['omzet'].cumsum() ngitung running total omzet yang reset di tiap cabang. Tanpa groupby, totalnya bakal terus nambah nyeberang antar cabang dan hasilnya salah. Cara ini menjaga tiap grup punya jumlah berjalannya sendiri tanpa nyampur data grup lain.
Apa beda cumsum, cummax, dan cumprod?
Ketiganya sama-sama berjalan baris demi baris, tapi operasinya beda. cumsum nambahin nilai jadi jumlah berjalan. cummax nyimpen nilai tertinggi yang pernah muncul sampai baris itu. cumprod ngaliin nilai jadi hasil kali berjalan, berguna buat menghitung pertumbuhan majemuk. Semua ngeluarin kolom sepanjang data asli, bukan satu angka ringkasan.
Gimana cumsum nangani nilai NaN?
Secara default, cumsum ngelewatin NaN dan nggak nghitungnya, tapi baris NaN itu sendiri tetap NaN di hasil. Total berjalan lanjut seolah baris kosong itu nol. Kalau kamu mau NaN dianggap nol beneran, isi dulu pakai fillna(0) sebelum cumsum. Kalau mau totalnya berhenti begitu ketemu NaN, atur argumen skipna=False.
Penutup
- cumsum ngitung running total, jumlah berjalan yang nambah tiap baris sampai total akhir.
- Ada cummax, cummin, dan cumprod buat maksimum, minimum, dan hasil kali berjalan.
- Selalu sort dulu, dan pakai groupby kalau datanya punya beberapa grup.
Coba sekarang: ambil arus kas harianmu, urutin per tanggal, lalu bikin kolom saldo pakai cumsum. Cari hari saldo paling tipis pakai nsmallest.
Konsep ini setara running total pakai SUM window function di SQL. Lihat referensi fungsi SUM dan istilah Aggregate Function di glosarium. Detail parameter ada di dokumentasi resmi pandas cumsum.
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.