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

Pandas实现按国家代码/产品ID分组保留唯一垂直组行

按组合维度去重的Pandas实现方案

原始数据

import pandas as pd

df = pd.DataFrame({
'COUNTRY_CODE': ['CO','CO','CO','BR','BR','BR'], 
'VERTICAL_GROUP_ID': [2,2,3,2,3,3], 
'SUB_VERTICAL': ['SUPER','SUPER','HOME','LICOR','SPORTS','HOME'], 
'PRODUCT_ID': [1111,1111,1111,1111,1111,2222], 
'SHOWN': [7,8,12,14,16,1], 
})

需求说明

对每个COUNTRY_CODE/PRODUCT_ID组合,每个VERTICAL_GROUP_ID仅保留任意一行,预期结果如下:

COUNTRY_CODEVERTICAL_GROUP_IDSUB_VERTICALPRODUCT_IDSHOWN
CO2SUPER11117
CO3HOME111112
BR2LICOR111114
BR3SPORTS111116
BR3HOME22221

问题场景

尝试使用groupby("PRODUCT_ID").drop_duplicates(subset=['VERTICAL_GROUP_ID'])时触发错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'drop_duplicates'

最优解决方法

无需使用groupby,直接通过drop_duplicates指定完整的去重维度即可:

# 按COUNTRY_CODE、PRODUCT_ID、VERTICAL_GROUP_ID组合去重,保留每组第一行
result_df = df.drop_duplicates(subset=['COUNTRY_CODE', 'PRODUCT_ID', 'VERTICAL_GROUP_ID'])

补充说明

  • drop_duplicates默认保留每组重复项的第一行,满足“任意保留一行”的需求
  • 若需要保留每组最后一行,可添加参数keep='last'
  • 该方法直接在原DataFrame上处理去重逻辑,性能优于先分组再处理的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:01:06