Pandas分组聚合求和后保留指定列Group的实现方法
解决方法
针对你的需求,有两种简单的实现方式,结合你的数据集特点(每个Name对应的Group是唯一固定的),推荐第一种更直接的方法:
方法一:同时按Name和Group分组求和
因为你的数据里每个用户的Group不会随记录变化,所以可以直接把Name和Group一起作为分组键,求和后自然就能保留Group列,代码如下:
agg = df.groupby(['Name', 'Group'], as_index=False)['Asset'].sum()
运行后得到的结果完全符合你的期望:
| Name | Asset | Group |
|---|---|---|
| Anton | 20 | Admin |
| Brad | 25 | Planer |
| Kevin | 55 | Admin |
| Peter | 30 | Planer |
| David | 10 | AT |
方法二:先聚合再合并(适配复杂场景)
如果后续数据可能出现同一个Name对应不同Group的情况(当前数据集不存在这种情况),可以拆分步骤处理:先单独聚合Asset求和,再提取Name与Group的唯一映射关系,最后合并两个结果:
# 1. 聚合Asset的总和 agg_asset = df.groupby('Name', as_index=False)['Asset'].sum() # 2. 获取Name和Group的唯一对应关系 name_group_map = df[['Name', 'Group']].drop_duplicates() # 3. 合并两个结果表 final_df = agg_asset.merge(name_group_map, on='Name')
这个方法更灵活,能应对数据结构变化的场景。
内容的提问来源于stack exchange,提问作者Bahlsen
相关产品推荐
相关产品推荐

