Python中合并重复行求和并创建新列遇ValueError问题求助
问题分析与解决方案
错误原因
你的代码存在两个核心问题:
- 分组键逻辑错误:需求是按
COL1分组对COL2求和,但你写的groupby(['COL2', 'COL1'])会先按COL2再按COL1分组,完全不符合需求。 - 未指定目标求和列:
transform('sum')会对分组后的所有数值列求和,返回多列的DataFrame,而你试图将其赋值给单列COL3,因此触发ValueError。
正确实现方式
方式1:保留原数据行数,每行显示对应COL1的求和值
如果想在原DataFrame的每一行都添加COL3,显示该行COL1对应的COL2总和:
df['COL3'] = df.groupby('COL1')['COL2'].transform('sum')
执行后原DataFrame结果:
| COL1 | COL2 | COL3 |
|---|---|---|
| AB | 5 | 10 |
| AB | 5 | 10 |
| AA | 2 | 2 |
| AC | 3 | 3 |
| AD | 8 | 12 |
| AD | 4 | 12 |
方式2:生成去重后的COL1与对应总和(匹配你给出的示例)
如果只想得到去重后的COL1和对应的求和结果,直接使用groupby+sum即可,不需要transform:
result_df = df.groupby('COL1', as_index=False)['COL2'].sum().rename(columns={'COL2': 'COL3'})
执行后得到的result_df即为目标格式:
| COL1 | COL3 |
|---|---|
| AA | 2 |
| AB | 10 |
| AC | 3 |
| AD | 12 |
补充说明
groupby('COL1')['COL2']明确指定仅对COL2列求和,避免返回多列数据。as_index=False确保分组后的COL1作为普通列而非索引,方便后续处理。rename用于将求和后的列名修改为你需要的COL3。
内容的提问来源于stack exchange,提问作者kiwi_kimchi
相关产品推荐
相关产品推荐

