Панды: совокупная сумма одного столбца на основе значения другого

Я пытаюсь вычислить некоторую статистику из фрейма данных pandas. Выглядит это примерно так:

id     value     conditional
1      10        0
2      20        0
3      30        1
1      15        1
3      5         0
1      10        1

Итак, мне нужно вычислить совокупную сумму столбца value для каждого id сверху вниз, но только когда conditional равно 1.

Итак, это должно дать мне что-то вроде:

id     value     conditional   cumulative sum
1      10        0             0
2      20        0             0
3      30        1             30
1      15        1             15
3      5         0             30
1      10        1             25

Таким образом, сумма id=1 берется только тогда, когда conditional=1 в 4-й и 6-й строке и значение 1-й строки не учитывается. Как мне это сделать в пандах?


person sfactor    schedule 20.10.2016    source источник


Ответы (1)


Вы можете создать серию, которая является умножением value и conditional, и взять ее совокупную сумму для каждой группы идентификаторов:

df['cumsum'] = (df['value']*df['conditional']).groupby(df['id']).cumsum()
df
Out: 
   id  value  conditional  cumsum
0   1     10            0       0
1   2     20            0       0
2   3     30            1      30
3   1     15            1      15
4   3      5            0      30
5   1     10            1      25
person ayhan    schedule 20.10.2016