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

时间:2015-08-05 22:05:31

标签: python r 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中这样做吗?

1 个答案:

答案 0 :(得分:0)

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