Уже есть несколько вопросов по этому топу c (например, Pandas: совокупная сумма одного столбца на основе значения другого), однако ни один из них не соответствует моим требованиям. Скажем, у меня есть такой фрейм данных:
id flag
a 1
a 1
a 0
a 0
a 1
b 0
b 0
b 1
b 1
b 1
b 1
c 0
c 1
c 1
c 0
c 1
Я хочу вычислить кумулятивную сумму группировки флагов по идентификатору, но избегаю суммы, когда флаг равен 0, а также снова сбрасывает cumsum до 0. Я попытался подвести итог, используя shift()
, groupby(id)['flag']cumsum()
внутри np.where
, но безуспешно. Желаемый результат должен быть:
id flag cum_flag
a 1 1
a 1 2
a 0 0
a 0 0
a 1 1
b 0 0
b 0 0
b 1 1
b 1 2
b 1 3
b 1 4
c 0 0
c 1 1
c 1 2
c 0 0
c 1 1
DDL для генерации фрейма данных:
df = pd.DataFrame({'id': [a, a, a, a, a, b, b, b, b, b, b, c, c, c, c, c],
'flag': [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1]})
Спасибо за вашу помощь!