Python - 通过移动范围对所有值求和

时间:2017-10-08 10:57:05

标签: python

实际上,我在给定特定窗口大小的情况下计算吞吐量。 但是,我不知道如何通过窗口累积值。例如:

time = [0.9, 1.1, 1.2, 2.1, 2.3, 2.6]
value = [1, 2, 3, 4, 5, 6]

应用窗口大小为1后,我应该

new_value = [1, 5, 15]

我已经想过使用数据框的索引但不知道如何实现它,因为我是python的新手。

2 个答案:

答案 0 :(得分:3)

您可以将itertools.groupby与自定义分组功能

一起使用
from itertools import groupby

def f(time, values, dt=1):
    vit = iter(values)
    return [sum(v for _, v in zip(g, vit)) for _, g in groupby(time, lambda x: x // dt)]
In [14]: f([0.9, 1.1, 1.2, 2.1, 2.3, 2.6], [1, 2, 3, 4, 5, 6])
Out[14]: [1, 5, 15]

In [15]: f([0.9, 1.1, 1.2, 2.1, 2.3, 2.6], [1, 2, 3, 4, 5, 6], dt=2)
Out[15]: [6, 15]

请注意,对于大小为1的窗口,您只需使用groupby(time, int)

答案 1 :(得分:1)

您可以使用Counter

time = [0.9, 1.1, 1.2, 2.1, 2.3, 2.6]
value = [1, 2, 3, 4, 5, 6]

from collections import Counter
counter = Counter()
for t,v in zip(time, value):
    counter[int(t)] += v

print(sorted(counter.items()))
# [(0, 1), (1, 5), (2, 15)]