如何合并DataFrame中的半重复行并修正总计值
合并重复ID的DataFrame行并计算正确总计值
问题描述
现有如下结构的DataFrame,其中存在重复的ID(及对应Name),单条重复行的Total值虽显示为固定正确值,但app_A/app_B/app_C列的数值分散在多行,需要合并重复行并汇总这些列的数值,最终得到无重复ID的正确数据集:
| ID | Name | app_A | app_B | app_C | Total |
|---|---|---|---|---|---|
| 0001 | John Smith | 0 | 5 | 3 | 8 |
| 0002 | Peter Piper | 2 | 0 | 3 | 5 |
| 0003 | Susan Jones | 1 | 0 | 0 | 7 |
| 0003 | Susan Jones | 0 | 2 | 4 | 7 |
| ... | ... | ... | ... | ... | ... |
解决方案
使用Pandas的groupby+agg方法实现合并与汇总:
import pandas as pd # 假设原始数据存储在DataFrame df中 merged_df = df.groupby(['ID', 'Name'], as_index=False).agg( app_A='sum', app_B='sum', app_C='sum', Total='first' # 重复行的Total值统一正确,取任意一个即可 )
代码说明
- 按
ID和Name分组:确保同一用户的所有重复行被归为一组 - 对
app_A/app_B/app_C求和:将分散在多行的数值合并为正确的总计 Total列取第一个值:由于重复行的Total值已经是正确的统一值,使用first/max/min均可得到正确结果
最终输出
处理后得到的DataFrame如下:
| ID | Name | app_A | app_B | app_C | Total |
|---|---|---|---|---|---|
| 0001 | John Smith | 0 | 5 | 3 | 8 |
| 0002 | Peter Piper | 2 | 0 | 3 | 5 |
| 0003 | Susan Jones | 1 | 2 | 4 | 7 |
| ... | ... | ... | ... | ... | ... |
内容的提问来源于stack exchange,提问作者ScottC
相关产品推荐
相关产品推荐

