Python - 对每行少于两列的列进行求和

时间:2018-05-08 13:20:54

标签: python

我有很多来自导入的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

谢谢

1 个答案:

答案 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]