Python中64后的累计和(条件累计和)

Cumulative sum after 64 in Python(Conditional Cumulative sum)

我是 python 的新手。我不确定如何在 python 中执行以下功能。我可以在 R 中执行此操作。但无法在 python 中执行此操作。有人可以帮我吗?

我想得到计数器值达到64后的累加和,

以下是我的数据,

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 中做到这一点。

下面是我需要的输出,

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 代码,

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)。 它取连续元素之间的差异,并在结果的左侧填充零。其余的几乎是一对一的对应关系:

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.])