2017-01-02 53 views
2

在以下DataFrame中,列B計算從索引0n的列A的總和。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通過dict添加map

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