Itertools Group通过循环不同的列

试图在Python中做一个条件和产品。 简化的想法如下:

A = [1 1 2 3 3 3] B = [0.50 0.25 0.99 0.80 0.70 0.20] 

我想作为输出

 Total1 = 0.50*1 + 0.25*1 Total2 = 0.99*2 Total3 = 0.80*3 + 0.70*3 + 0.20*3 

感谢在这里的人们的支持,这部分工作!

下一个我喜欢添加的函数,就是可以计算出不同的列'B'(比如B1,B2,B3,…)(具有不同的值)。 这些都存储在Excel中,我用openpyxl将它们读出到不同的列表中(可能会更有效率…)这意味着B1 / B2 / …中的值与A中的相应值相对应。

 number = -1 j = 0 for col in ws.iter_cols(): if col[3].value == "fast" : number = j j+=1 B1 = [row[number].value for row in ws.iter_rows(min_row=5, max_row=63332) ] B1_float = [float(i) for i in B1] 

有没有办法执行这个脚本不同的组合(A&B1 / A&B2 / A&B3 / …)并将它们存储在matrix中? (或者excel文件)

我希望这是我的意思,如果没有,让我知道!

看来你问了两个问题:

  1. 根据单独的列表中的组计算产品总和
  2. 将这些结果写入Excel文件

由于这些问题是完全不同的,所以我会解决第一个问题,然后参考第二个问题。

 import operator as op import itertools as it import functools as ft A = [1, 1, 2, 3, 3, 3] B = [0.5, 0.25, 0.99, 0.8, 0.7, 0.2] groups = [list(g) for k, g in it.groupby(zip(A, B), op.itemgetter(0))] groups # [[(1, 0.5), (1, 0.25)], [(2, 0.99)], [(3, 0.8), (3, 0.7), (3, 0.2)]] 

在这里,我们将数据列压缩并根据列表A分组。 现在我们可以将适当的操作符应用到每个可迭代的groups

 [sum(ft.reduce(op.mul, i) for i in sub) for sub in groups] # [0.75, 1.98, 5.1] 

至于将数据写入Excel,有几个可用的Python库 ,每个都有关于如何这样做的文档。