import pandas as pd
df = pd.DataFrame({
'date': ['2026-01', '2026-02', '2026-03'],
'amount': [100, 150, 210],
})
df['running'] = df['amount'].cumsum()
Результат:
date amount running 2026-01 100 100 2026-02 150 250 2026-03 210 460
df = pd.DataFrame({
'user_id': [1, 1, 2, 2],
'amount': [100, 200, 50, 70],
})
df['cum'] = df.groupby('user_id')['amount'].cumsum()
Результат:
user_id amount cum
1 100 100
1 200 300
2 50 50
2 70 120
df['visit_no'] = df.groupby('user_id').cumcount() + 1
Результат:
user_id amount visit_no
1 100 1
1 200 2
2 50 1
2 70 2
Порешать Python-задачи в тренажёре →
Спрашивают про running total и нумерацию строк внутри группы; cumcount идёт в паре с groupby как аналог ROW_NUMBER, а cumsum — рядом с оконными функциями SQL (SUM() OVER ... ).
cumsum — накопительная сумма значений столбца. cumcount — накопительный счётчик строк внутри группы (0-индексный), это метод только у GroupBy. cumcount игнорирует сами значения и считает лишь порядковый номер строки в группе.
Практически да. Но cumcount() нумерует с 0, поэтому для полного аналога ROW_NUMBER() OVER (PARTITION BY ...) добавь +1. Порядок нумерации задаётся предварительной сортировкой DataFrame по нужному ключу.
По умолчанию skipna=True — NaN не ломает накопление, сумма продолжается со следующего значения. Но в самой позиции NaN в результате останется NaN. С skipna=False всё после первого NaN станет NaN.
Pandas groupby · Pandas: основы
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →