我正在使用python,我从CSV文件中读出一列。我通过对它们进行分组来保存数组中的值。这个数组看起来像这样:
[1, 5, 10, 15, 7, 3]
我想创建第二个数组,其中我获取数组的数量并与之前的值进行求和。所以在这种情况下我希望得到以下输出:
[1, 6, 16, 31, 38, 41]
我的代码如下:
import csv
import itertools
with open("c:/test", 'rb') as f:
reader = csv.reader(f, delimiter=';')
data1 = []
data2 = []
for column in reader:
data1.append(column[2])
results = data1
results = [int(i) for i in results]
results = [len(list(v)) for _, v in itertools.groupby(results)]
print results
data2.append(results[0])
data2.append(results[0]+results[1])
data2.append(results[0]+results[1]+results[2])
print data2
所以我可以通过手动创建数组,但这需要花费很多时间,而且可能不是最好的方法。那么做这样的事情的最佳方法是什么?
答案 0 :(得分:3)
您正在寻找列表的累积总和。最简单的方法是让numpy
去做。
>>> import numpy as np
>>> np.cumsum([1, 5, 10, 15, 7, 3])
array([ 1, 6, 16, 31, 38, 41])
答案 1 :(得分:1)
a = [1, 5, 10, 15, 7, 3]
b = [a[0]]
for i in range(1, len(a)):
b.append(b[-1]+ a[i])
是来自.csv的专栏。 b 是一个列表,其中包含一个值,这是 a 的第一项。然后我们从它的第二项开始循环 a ,然后我们将其后续值添加到 b 的最后一项,并将其附加到 b < / em>的
答案 2 :(得分:0)
使用您的代码对象,您所寻找的内容将是:
from __future__ import print_function
import csv
import itertools
"""
with open("c:/test", 'rb') as f:
reader = csv.reader(f, delimiter=';')
for column in reader:
data1.append(column[2])
"""
data1 = [1, 5, 10, 15, 7, 3]
results = [data1[0]]
for i in range(1, len(data1)):
results.append(results[i-1] + data1[i])
print(data1, results)