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

Python中DataFrame重复行保留首行并对指定列求和的实现

解决方案

你需要的需求可以通过pandas的groupby()结合聚合操作直接实现,无需依赖pd.duplicated(),具体代码如下:

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame({
    'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],
    'style': ['cup', 'cup', 'cup', 'pack', 'pack'],
    'rating': [4, 4, 3.5, 15, 5]
})

# 核心操作:按brand+style分组,对rating求和,保留分组键为普通列
result = df.groupby(['brand', 'style'], as_index=False)['rating'].sum()

代码解释

  • groupby(['brand', 'style']):以brand和style作为分组依据,将所有同品牌同包装类型的行归为一组,这正好对应你要识别的"重复行组"
  • as_index=False:确保分组键(brand和style)作为普通数据列保留,而非转为结果的索引
  • ['rating'].sum():仅对rating列执行求和聚合,分组键列会自动保留每组的唯一值

运行代码后得到的结果完全符合你的期望:

brand style  rating
0  Yum Yum   cup     8.0
1  Indomie   cup     3.5
2  Indomie  pack    20.0

备选方案(基于pd.duplicated()的思路)

如果一定要用pd.duplicated()实现(效率低于直接groupby),可以按以下步骤操作:

# 标记每组的首行(非重复行)
non_duplicate_mask = ~df.duplicated(subset=['brand', 'style'])
# 提取每组首行的基础信息
base_df = df[non_duplicate_mask].copy()
# 按分组对rating求和
summed_ratings = df.groupby(['brand', 'style'])['rating'].sum().reset_index(drop=True)
# 替换base_df中的rating为求和后的值
base_df['rating'] = summed_ratings
# 重置索引
final_result = base_df.reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:08:27