这似乎是一个很好的适合itertools.groupby
(假设A
被分类的值,它可能会无法正常的工作A=[1,1,2,2,1]
):
from itertools import groupby
A = [1, 1, 2, 3, 3, 3]
B = [0.50, 0.25, 0.99, 0.80, 0.70, 0.20]
for key, grp in groupby(zip(A, B), key=lambda x: x[0]):
grp = [i[1] for i in grp]
print(key, key * sum(grp))
它打印:
1 0.75
2 1.98
3 5.1
您也可以将其存储在列表中而不是打印值:
res = []
for key, grp in groupby(zip(A, B), key=lambda x: x[0]):
grp = [i[1] for i in grp]
res.append(key*sum(grp))
print(res)
# [0.75, 1.98, 5.1]
如果第三方包可能是你的选择,你也可以使用iteration_utilities.groupedby
:
>>> from iteration_utilities import groupedby
>>> from operator import itemgetter, add
>>> {key: key*sum(value) for key, value in groupedby(zip(A, B), key=itemgetter(0), keep=itemgetter(1)).items()}
{1: 0.75, 2: 1.98, 3: 5.1}
或直接使用的groupedby
的reduce
参数:
>>> groupedby(zip(A, B), key=itemgetter(0), keep=lambda x: x[0]*x[1], reduce=add)
{1: 0.75, 2: 1.98, 3: 5.1}
免责声明:我是iteration_utilities
包的作者。
你能澄清A和B之间的关系吗? – illiteratecoder
当然,一些上下文: 我有公司名称(行),的Excel文件与** **列1 °“类型” =要施加 2°百分比= B 我需要得到各类公司的百分比总和。 希望这有助于!如果没有,请拍! –
这种情况下的产品是什么?似乎你只是想要一笔钱 – illiteratecoder