2015-10-01 13 views
11

与えられた列の実行合計を計算したい(もちろんループを使用しない)。注意すべき点は、実行中の合計をその行にある値にいつリセットするかを指定するこの他の列があることです。次の例で最もよく説明されています。Pandas 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