You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID分组对DataFrame中重复Color的Amount值求和并去重

同一ID下相同Color的Amount求和方案

问题场景

我有如下结构的DataFrame,其中Color为字符类型,Amount为数值类型。存在同一ID下重复的Color记录,对应不同的Amount值,需要将同一ID下相同Color的Amount求和,保留唯一的Color记录(不是对整列求和)。

原始DataFrame:

Color   Amount    ID
[1] Purple  45        566
[2] Blue    56        566
[3] Blue    53        566
[4] Yellow  68        566
[5] Green   76        566
[6] Purple  93        789
[7] Purple  35        789
[8] Blue    56        789
[9] Yellow  37        789

期望结果:

Color   Amount    ID
[1] Purple  45        566
[2] Blue    109       566
[4] Yellow  68        566
[5] Green   76        566
[6] Purple  128       789
[8] Blue    56        789
[9] Yellow  37        789

解决方案

用Pandas的groupby方法按ID和Color分组,对Amount字段求和即可。如果需要保持原始数据中Color的出现顺序,可以额外处理排序逻辑。

代码实现

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'Color': ['Purple', 'Blue', 'Blue', 'Yellow', 'Green', 'Purple', 'Purple', 'Blue', 'Yellow'],
    'Amount': [45, 56, 53, 68, 76, 93, 35, 56, 37],
    'ID': [566, 566, 566, 566, 566, 789, 789, 789, 789]
})

# 核心:按ID和Color分组,对Amount求和
summed_df = df.groupby(['ID', 'Color'], as_index=False)['Amount'].sum()

# 保持原始Color出现顺序(可选,若不在意顺序可跳过)
# 提取原始数据中每个ID下的Color唯一顺序
original_order = df.drop_duplicates(['ID', 'Color']).sort_values('ID')[['ID', 'Color']]
# 合并结果以匹配原始顺序
final_df = pd.merge(original_order, summed_df, on=['ID', 'Color'])

print(final_df)

输出结果

Color  Amount   ID
0  Purple      45  566
1    Blue     109  566
2  Yellow      68  566
3   Green      76  566
4  Purple     128  789
5    Blue      56  789
6  Yellow      37  789

说明

  • groupby(['ID', 'Color'])确保只对同一ID下的相同Color进行分组,避免跨ID合并。
  • as_index=False让分组后的ID和Color保持为普通列,而非多层索引。
  • 额外的顺序处理步骤是为了和原始数据中Color的出现顺序一致,若不需要严格匹配顺序,直接使用summed_df即可。

内容的提问来源于stack exchange,提问作者Ophelia Hanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:51:32