2017-01-02 3 views
2

В следующем DataFrame в столбце B вычисляется сумма столбца A из индекса 0 - n.Динамические кумулятивные суммы в Pandas

ix A  B 
--------------- 
0  1  1 
1  1  2 
2  1  3 
3  1  4 
4  2  6 
5 -1  5 
6 -3  2 

В качестве альтернативы, столбец B суммы 1 для каждого type == 'I' и -1 для каждого type == 'O'.

ix type  B 
---------------- 
0  I  1 
1  I  2 
2  O  1 
3  I  2 
4  O  1 
5  O  0 
6  I  1 

Как выполнить этот тип вычислений, где n-th результат одного столбца зависит от агрегированных результатов другого столбца, до n?

+1

Посмотрите на '' cumsum' и expanding'. – IanS

+0

@IanS должен сделать трюк! благодаря – Jivan

ответ

2

Вы можете использовать cumsum:

df['C'] = df.A.cumsum() 
print (df) 
    ix A B C 
0 0 1 1 1 
1 1 1 2 2 
2 2 1 3 3 
3 3 1 4 4 
4 4 2 6 6 
5 5 -1 5 5 
6 6 -3 2 2 

А для второго df добавить map по dict:

df['C'] = df.type.map({'I':1, 'O':-1}).cumsum() 
print (df) 
    ix type B C 
0 0 I 1 1 
1 1 I 2 2 
2 2 O 1 1 
3 3 I 2 2 
4 4 O 1 1 
5 5 O 0 0 
6 6 I 1 1 

Или:

df['C'] = df.type.replace({'I':1, 'O':-1}).cumsum() 
print (df) 
    ix type B C 
0 0 I 1 1 
1 1 I 2 2 
2 2 O 1 1 
3 3 I 2 2 
4 4 O 1 1 
5 5 O 0 0 
6 6 I 1 1 
Смежные вопросы