2015-10-01 35 views
11

Voglio calcolare la somma parziale in una data colonna (senza usare loop, ovviamente). L'avvertenza è che ho questa altra colonna che specifica quando resettare la somma corrente al valore presente in quella riga. Meglio spiegato dal seguente esempio:Dataframe Pandas - somma parziale con 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 è il valore che voglio essere calcolato.

risposta

20

È possibile utilizzare 2 volte 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