我有很多来自导入的csv文件的列,我正在以3的组合进行分析(其中'abc'='cba'='bac',因此只使用了一种组合。)
我的目标是将每列的值加总为3个变量,其中行是3
之间的最低值for s1 in range(15, 134):
for s2 in range(s1 + 1, 135):
for s3 in range(s2 + 1, 136):
for r in range(2, 27041):
if data[r][s1] < data[r][s2] and data[r][s1] < data[r][s3]:
s1M = s1M + float(data[r][s1])
s1C = s1C + float(data[r][12])
elif data[r][s2] < data[r][s1] and data[r][s2] < data[r][s3]:
s2M = s2M + float(data[r][s2])
s2C = s2C + float(data[r][12])
else:
s3M = s3M + float(data[r][s3])
s3C = s3C + float(data[r][12])
所以我需要s1M是列s1的总和,其中每行具有最低值,s2M其中s2具有每行的最低值,s3M其中s3具有每行的最低值。
虽然这很快,但我想知道是否有更快的方法可以在不循环每一行的情况下进行。
此外,还有3个其他变量需要是第12列的总和,其中s1,s2和s3列中的每一行都具有最低值。
实施例
Cube s1 s2 s3
156 1 6 3
134 2 5 4
105 3 4 5
3 4 3 6
744 5 2 1
89 6 1 2
比较这些列我希望得到以下输出
s1M = 6 (rows 1, 2 and 3)
s2M = 5 (rows 4 and 6)
s3M = 2 (row 5)
s1C = 395
s2C = 91
s3C = 744
谢谢
答案 0 :(得分:1)
使用您的示例数据,这种方法似乎没问题:
cube = [156,134,105,3,744,89]
s1 = [1,2,3,4,5,6]
s2 = [6,5,4,3,2,1]
s3 = [3,4,5,6,1,2]
data = zip(s1, s2, s3)
sM = {0: 0,
1: 0,
2: 0}
sC = {0: 0,
1: 0,
2: 0}
for i, row in enumerate(data):
low = min(row)
sM[row.index(low)] += low
sC[row.index(low)] += cube[i]