2016-10-20 3 views
2

Я пытаюсь вычислить некоторую статистику из фрейма данных pandas. Это выглядит примерно так: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-го значения строки не учитывается. Как это сделать в пандах?

ответ

7

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

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 
Смежные вопросы