【问题标题】:Itertools Groupby looping over different columnsItertools Groupby循环遍历不同的列
【发布时间】:2017-08-25 12:18:07
【问题描述】:

'正在尝试在 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 / ...)执行this 脚本并将它们存储在矩阵中? (或excel文件)

我希望我的意思很清楚,如果没有,请告诉我!

【问题讨论】:

  • 请不要忘记使用openpyxl 添加“如何”存储或迭代这些不同的值。 IE。你如何获取和接收列?
  • 好的,我编辑了进一步解释:)

标签: excel python-3.x itertools


【解决方案1】:

您似乎在问两个问题:

  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,有 several Python libraries 可用,每个都有有关如何执行此操作的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2019-10-18
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多