2015-10-01 8 views
11

Ich möchte die laufende Summe in einer bestimmten Spalte berechnen (ohne natürlich Schleifen zu verwenden). Der Nachteil ist, dass ich diese andere Spalte habe, die angibt, wann die laufende Summe auf den in dieser Zeile vorhandenen Wert zurückgesetzt werden soll. Am besten durch das folgende Beispiel erläutert:Pandas Datenframe - laufende Summe mit Reset

reset val desired_col 
0  0 1 1 
1  0 5 6 
2  0 4 10 
3  1 2 2 
4  1 -1 -1 
5  0 6 5 
6  0 4 9 
7  1 2 2 

desired_col ist der Wert I berechnet werden soll.

Antwort

20

Sie können mit 2 mal cumsum():

# reset val desired_col 
#0  0 1   1 
#1  0 5   6 
#2  0 4   10 
#3  1 2   2 
#4  1 -1   -1 
#5  0 6   5 
#6  0 4   9 
#7  1 2   2 
df['cumsum'] = df['reset'].cumsum() 
#cumulative sums of groups to column des 
df['des']= df.groupby(['cumsum'])['val'].cumsum() 
print df 
# reset val desired_col cumsum des 
#0  0 1   1  0 1 
#1  0 5   6  0 6 
#2  0 4   10  0 10 
#3  1 2   2  1 2 
#4  1 -1   -1  2 -1 
#5  0 6   5  2 5 
#6  0 4   9  2 9 
#7  1 2   2  3 2 
#remove columns desired_col and cumsum 
df = df.drop(['desired_col', 'cumsum'], axis=1) 
print df 
# reset val des 
#0  0 1 1 
#1  0 5 6 
#2  0 4 10 
#3  1 2 2 
#4  1 -1 -1 
#5  0 6 5 
#6  0 4 9 
#7  1 2 2 
Verwandte Themen