我是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中这样做吗?
答案 0 :(得分:0)
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.])