Pandas DataFrame按ID合并重复行并汇总n_tickets列值问题
解决Pandas按id去重并求和n_tickets的问题
嘿,我来帮你搞定这个分组求和的小问题!你之前的代码没得到预期结果,其实是踩了个容易忽略的小坑——咱们一步步理清楚:
问题出在哪?
你写的df_tickets.groupby(['id','n_tickets']).sum(),是把id和n_tickets同时作为分组依据了。这意味着Pandas会把「id相同且n_tickets也相同」的行归为一组求和,但你的需求是每个id只保留唯一行,把该id对应的所有n_tickets加起来,所以绝对不能把n_tickets放进分组键里。
正确的解决方法
这里有两种简单好用的方式,都能精准满足你的需求:
方法一:指定分组列+单独求和目标列
只按id分组,然后对n_tickets列求和,最后用reset_index()把id从索引转回普通列,保证结果格式符合预期:
result_df = df_tickets.groupby('id')['n_tickets'].sum().reset_index()
方法二:使用agg()方法(更灵活)
如果之后你需要对多列做不同的聚合操作,agg()会更方便,这里咱们只针对n_tickets求和:
result_df = df_tickets.groupby('id').agg({'n_tickets': 'sum'}).reset_index()
举个实际例子验证
假设你的原始DataFrame是这样的:
| id | n_tickets |
|---|---|
| 640 | 2 |
| 640 | 3 |
| 780 | 1 |
| 780 | 4 |
用上面任意一种方法,都会得到你想要的结果:
| id | n_tickets |
|---|---|
| 640 | 5 |
| 780 | 5 |
这样就完美实现了「每个id唯一,对应n_tickets求和」的需求啦!
内容的提问来源于stack exchange,提问作者Abhinandan Singh
相关产品推荐
相关产品推荐

