以下是我的数据
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时,它似乎效果不佳。我无法理解这里的缺陷。任何人都可以告诉我我在这里做了什么错,需要改变什么?
由于
答案 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