python求助 最近小白遇到关于list列表的一个问题

cwmlow 2019-02-12 03:09:04
比如有这样一个列表
listA=[( 1, '学生A', 5, 6, 7),
( 2,'学生B', 12, 13, 14),
( 2,'学生B', 122, 133, 144),
(3, '学生C', 77, 88, 99),
(3, '学生C', 7, 8, 9)
]
理想输出如下
listB=[( 1, '学生A', 5, 6, 7),
( 2,'学生B', 134, 146,158),
(3, '学生C', 84, 96, 108)
]
小白前面通过转字典进行单元素累加还是可行,可是遇到这种多元素根据id(或者学生姓名)进行累加就无从下手了
有想过用collections里Counter,但是id也会累加上去。。求助大佬
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈年椰子 2019-02-12
  • 打赏
  • 举报
回复
引用 楼主 cwmlow 的回复:
比如有这样一个列表
listA=[( 1, '学生A', 5, 6, 7),
( 2,'学生B', 12, 13, 14),
( 2,'学生B', 122, 133, 144),
(3, '学生C', 77, 88, 99),
(3, '学生C', 7, 8, 9)
]
理想输出如下
listB=[( 1, '学生A', 5, 6, 7),
( 2,'学生B', 134, 146,158),
(3, '学生C', 84, 96, 108)
]
小白前面通过转字典进行单元素累加还是可行,可是遇到这种多元素根据id(或者学生姓名)进行累加就无从下手了
有想过用collections里Counter,但是id也会累加上去。。求助大佬



import pandas as pd
listA=[( 1, '学生A', 5, 6, 7),
( 2,'学生B', 12, 13, 14),
( 2,'学生B', 122, 133, 144),
(3, '学生C', 77, 88, 99),
(3, '学生C', 7, 8, 9)
]
df1 = pd.DataFrame(listA)
df1.columns = ['id', 'name', 's1', 's2', 's3']
df2 = df1.groupby(['id', 'name']).sum().reset_index()
listB = df2.values.tolist()
listC = [(int(id),name,int(s1),int(s2),int(s3)) for id,name,s1,s2,s3 in listB ]
print(listC)

陈年椰子 2019-02-12
  • 打赏
  • 举报
回复
这个和上次那个问题不是一样的吗? 可以考虑用pandas解决。
https://bbs.csdn.net/topics/392514402
手无护鸡之力 2019-02-12
  • 打赏
  • 举报
回复
你这数据从哪来的?是从数据库查的吧?

那你查询的时候,用group by id, 做一下聚合就得到 listB 了,不需要再用Python处理

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧