如何按指定优先级对product_number列去重生成唯一DataFrame?
按产品优先级去重生成唯一DataFrame
核心思路
先给不同产品名称定义优先级权重(遵循Product A > B > C的规则,其他产品优先级默认最低),再按product_number分组,每组保留优先级最高的记录。
实现步骤
- 定义优先级映射字典:明确A、B、C的优先级顺序,其他产品可按需设置默认优先级
- 给原DataFrame添加优先级列:将
product_name转换为对应的优先级数值 - 分组排序去重:按
product_number分组,组内按优先级降序排列,取第一条记录即为该组优先级最高的条目
代码示例
import pandas as pd # 模拟原始数据 raw_data = { 'product_number': ['1000003', '1000003', '1000005', '1000005', '1000006', '1000006', '1000007'], 'product_name': ['Product B', 'Product A', 'Product C', 'Product A', 'Product C', 'Product B', 'Product D'], 'sku_info': ['SKU001', 'SKU002', 'SKU003', 'SKU004', 'SKU005', 'SKU006', 'SKU007'] } df = pd.DataFrame(raw_data) # 设定优先级:A(3) > B(2) > C(1),未指定的产品默认优先级0 priority_dict = {'Product A': 3, 'Product B': 2, 'Product C': 1} df['priority_score'] = df['product_name'].map(priority_dict).fillna(0) # 按产品编号分组,保留优先级最高的记录 unique_df = df.sort_values('priority_score', ascending=False)\ .groupby('product_number', as_index=False)\ .first() # 移除临时优先级列 unique_df = unique_df.drop('priority_score', axis=1) print(unique_df)
输出结果
product_number product_name sku_info 0 1000003 Product A SKU002 1 1000005 Product A SKU004 2 1000006 Product B SKU006 3 1000007 Product D SKU007
灵活调整
如果后续需要新增产品优先级,只需修改priority_dict即可,比如添加'Product E': 4就能让E的优先级高于A。
内容的提问来源于stack exchange,提问作者Tenserflu
相关产品推荐
相关产品推荐

