How to reset cumsum after change in sign of values?

陌路散爱 提交于 2019-12-02 15:01:41

问题


In [46]: d = np.random.randn(10, 1) * 2

In [47]: df = pd.DataFrame(d.astype(int), columns=['data'])

I am trying to create a cumsum column where it should reset after a sign change in data column, like this

   data  custom_cumsum
0    -2  -2
1    -1  -3 
2     1   1
3    -3  -3
4    -1  -4
5     2   2 
6     0   2 
7     3   5 
8    -1  -1 
9    -2  -3 

I am able to achieve this with df.iterrows(). I am trying to avoid iterrows and do it with vector operations. There are couple of questions on resetting cumsum when there is NaN. I am not able to achieve this cumsum with those solutions.


回答1:


Create new key to groupby, then do cumsum within each group

New key Create: By using the sign change , if change we add one then it will belong to nest group

df.groupby(df.data.lt(0).astype(int).diff().ne(0).cumsum()).data.cumsum()
Out[798]: 
0   -2
1   -3
2    1
3   -3
4   -4
5    2
6    2
7    5
8   -1
9   -3
Name: data, dtype: int64


来源:https://stackoverflow.com/questions/49390300/how-to-reset-cumsum-after-change-in-sign-of-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!