2017-01-02 3 views
2

Im folgenden DataFrame berechnet die Spalte B die Summe der Spalte A von Index 0 bis n.Dynamische kumulative Summen in 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 

Alternativ kann die Säule B Summen 1 für jede type == 'I' und -1 für jeden 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 

Wie diese Art von Berechnungen durchzuführen, in dem das n-th Ergebnis einer Spalte auf den aggregierten Ergebnisse einer anderen Spalte abhängt, bis zu n?

+1

Blick auf '' cumsum' und expanding'. – IanS

+0

@IanS sollte den Trick machen! Vielen Dank – Jivan

Antwort

2

können Sie cumsum verwenden:

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 

Und für die zweite df hinzufügen map von 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 

Oder:

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