关于r:Python中64后的累积和(条件累积和)

Cumulative sum after 64 in Python(Conditional Cumulative sum)

我是Python的新手。我不知道如何在Python中执行以下函数。我可以在r中完成这项工作,但不能在python中完成。有人能帮我吗?

我想得到计数器值的累积和,一旦它达到64,

以下是我的数据,

1
2
x = [57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 61, 61, 62, 62, 1, 1, 11, 16,
     16, 16, 16, 16, 16, 22, 22, 22, 27, 28]

我想要计数达到64后的累积和。我不知道如何在Python中做到这一点。

以下是我需要的输出,

1
2
x = [57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 61, 61, 62, 62, 65, 65, 75, 80,
     80, 80, 80, 80, 80, 86, 86, 86, 91, 92]

这基本上是一个计数器,所以会有很多次重置。这个下面是我使用的R代码,

1
2
x1<-cumsum(c(0,diff(sub$x)<0))
  sub$x<-sub$x+64*x1

有人能帮我用python做这个吗?


numpy中的np.ediff1d(x, to_begin=[0]) < 0相当于r中的c(0,diff(sub$x)<0)。它利用连续元素和pad之间的差异,结果在左边为零。剩下的几乎是一对一的通信:

1
2
3
4
5
6
7
8
9
10
11
In [125]: x
Out[125]:
array([ 57.,  57.,  57.,  57.,  57.,  57.,  58.,  58.,  58.,  58.,  61.,
        61.,  62.,  62.,   1.,   1.,  11.,  16.,  16.,  16.,  16.,  16.,
        16.,  22.,  22.,  22.,  27.,  28.])

In [126]: (np.ediff1d(x, to_begin=[0])<0).cumsum()*64 + x
Out[126]:
array([ 57.,  57.,  57.,  57.,  57.,  57.,  58.,  58.,  58.,  58.,  61.,
        61.,  62.,  62.,  65.,  65.,  75.,  80.,  80.,  80.,  80.,  80.,
        80.,  86.,  86.,  86.,  91.,  92.])