在Python中64之后的累积和

时间:2015-08-21 16:16:54

标签: python

以下是我的数据

               count  
0               239  
1                47  
2                47  
3                47  
4                47  
5                47  
6                47  
7                47  
8                47  
9                47  
10               47  
11               48  
12               48  
13               48  
14               48  
15               48  
16               48  
17               48  
18               48  
19               48  
20               48  
21               48  
22               48  
23               48  
24               48  
25               48  
26               48  
27               48  
28               49  
29               50  

一旦达到64,我想获得计数器值的累积和。例如,如果我的数据如下,

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

我的输出应该是,

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

对于上面提到的例子,我尝试的代码如下,

(np.ediff1d(x, to_begin=[0])<0).cumsum()*64 + x

此代码似乎适用于该示例。

但是对于我的原始数据,我得到以下内容,

Count
239
111
.
.
.
112
.
.
.
113
114

而我的预期输出是,

239
286
.
.
.
287
.
.
.
288
289

每当第一个值大约为200时,它似乎效果不佳。我无法理解这里的缺陷。任何人都可以告诉我我在这里做了什么错,需要改变什么?

由于

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,这对你有用。我拿第一列并寻找数字28(作为测试),在此我指出我开始计算累积总和。你会想把它改成64,除非我误解了。

这种方法有效,但我确信有更短的方法可以做到这一点!

data = '''               count
0               239
1                47
2                47
3                47
4                47
5                47
6                47
7                47
8                47
9                47
10               47
11               48
12               48
13               48
14               48
15               48
16               48
17               48
18               48
19               48
20               48
21               48
22               48
23               48
24               48
25               48
26               48
27               48
28               49
29               50  '''

cumulative_sum = 0

for line in data.splitlines():
    try:
        tmp = map(int,line.strip().split())
        if tmp[0]>=28:
            cumulative_sum += tmp[1]
    except ValueError:
        pass