2015-10-01 31 views
11

Tôi muốn tính tổng chạy trong một cột nhất định (không sử dụng vòng lặp, tất nhiên). Thông báo trước là tôi có cột khác này xác định khi nào để đặt lại tổng số đang chạy đến giá trị hiện tại trong hàng đó. Tốt nhất được giải thích bằng ví dụ sau:Pandas dataframe - chạy tổng cộng với thiết lập lại

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 là giá trị tôi muốn được tính toán.

Trả lời

20

Bạn có thể sử dụng 2 lần 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