2015-10-01 137 views
11

我想計算給定列中的運行總和(當然不使用循環)。需要注意的是,我有另一列指定何時將運行總和重置爲該行中存在的值。以下示例解釋最好:熊貓dataframe - 運行總和與重置

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是我想要計算的值。

回答

20

可以使用2次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