如何在更改值符号后重置cumsum?

时间:2018-03-20 17:09:58

标签: python pandas dataframe pandas-groupby

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

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

我正在尝试创建一个cumsum列,它应该在数据列中的符号更改后重置,就像这样

   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 

我可以使用df.iterrows()实现此目的。我试图避免iterrows并使用向量操作。当有NaN时,resetting cumsum上有几个问题。我无法通过这些解决方案实现这个目标。

1 个答案:

答案 0 :(得分:3)

groupby创建新密钥,然后在每个组中执行cumsum

新密钥创建:通过使用符号更改,如果更改我们添加一个,那么它将属于嵌套组

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