python列表分组合并求和问题
在下工作中遇到如下问题,我有一个大的列表
lista = [ ["a", "b", "c", 1],
["a", "b", "c", 2],
["d", "e", "f", 1],
["a", "c", "c", 2],
...
]
要合并以上列表, 前三项相同的列表进行合并,第四项相加,想要得到如下结果
lista = [ ["a", "b", "c", 3],
["d", "e", "f", 1],
["a", "c", "c", 2],
...
]
可以覆盖原先lista,也可以不覆盖,生成大的listb列表也行,请问有大佬帮小弟指点下思路么
回答:
python">from typing import DefaultDictlista=[
[1,2,3,1],
[1,2,3,2],
[1,3,2,1],
]
result=DefaultDict(int)
for k,v in zip(map(lambda i: tuple(i[:3]), lista),map(lambda i: i[3], lista)):
result.update({k:result[k]+v})
print(result)
最终结果
defaultdict(<class 'int'>, {(1, 2, 3): 3, (1, 3, 2): 1})
转成你要的 lista 这种格式就好了。
PS:编辑器补全了一个错误的defaultdict我懒得改了。
回答:
pandas实现:
import pandas as pddf=pd.DataFrame(lista,columns=["c1","c2","c3","v"])
listb=df.groupby(["c1","c2","c3"]).sum().reset_index().to_numpy().tolist()
以上是 python列表分组合并求和问题 的全部内容, 来源链接: utcz.com/p/938000.html