重置后的累积总和
Cumulative sum with a reset
我想使用 pandas 的 cumsum 函数,并在满足条件时重置此累积序列。例如我有这个 df :
o values
0 1 4
1 1 4
2 2 2
3 2 5
4 3 1
5 3 10
并且 'o' 的值为 +1 我想重置累计和。我知道我可以通过 :
找到条件
s = df['o'].diff() == 1
其中 return 一个布尔系列,其中一行 ['o'] 是 + 1。
我怎样才能继续得到以下结果:
o values cum_sum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11
感谢您的帮助和宝贵时间!
您可以使用 pd.DataFrame.groupby
and cumsum()
:
df['cumsum']=df.groupby('o').cumsum()
输出:
df
o values cumsum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11
使用:
df['cum_sum'] = df.groupby('o').transform('cumsum')
输出:
o values cum_sum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11
我想使用 pandas 的 cumsum 函数,并在满足条件时重置此累积序列。例如我有这个 df :
o values
0 1 4
1 1 4
2 2 2
3 2 5
4 3 1
5 3 10
并且 'o' 的值为 +1 我想重置累计和。我知道我可以通过 :
找到条件s = df['o'].diff() == 1
其中 return 一个布尔系列,其中一行 ['o'] 是 + 1。
我怎样才能继续得到以下结果:
o values cum_sum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11
感谢您的帮助和宝贵时间!
您可以使用 pd.DataFrame.groupby
and cumsum()
:
df['cumsum']=df.groupby('o').cumsum()
输出:
df
o values cumsum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11
使用:
df['cum_sum'] = df.groupby('o').transform('cumsum')
输出:
o values cum_sum
0 1 4 4
1 1 4 8
2 2 2 2
3 2 5 7
4 3 1 1
5 3 10 11