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

如何从含重复id的数据集提取对应最高等级status的唯一结果?

问题描述

我有一个包含重复id的数据集,每个id对应不同的status(Gold、Silver、Bronze),需要为每个id保留最高等级的status(优先级:Gold > Silver > Bronze),忽略其他低等级的记录。

原始数据集:

idstatusDate
402Gold5/3/2019
402Silver5/3/2018
402Bronze5/1/2018
405Silver5/3/2020
405Bronze5/3/2019
408Bronze5/3/2019
408Gold5/3/2020

期望结果:405-Silver、402-Gold、408-Gold


方法1:Python Pandas 实现

通过给status分配优先级权重,分组筛选最高等级记录:

import pandas as pd

# 加载示例数据(实际使用时可替换为读取文件逻辑)
data = pd.DataFrame({
    'id': [402, 402, 402, 405, 405, 408, 408],
    'status': ['Gold', 'Silver', 'Bronze', 'Silver', 'Bronze', 'Bronze', 'Gold'],
    'Date': ['5/3/2019', '5/3/2018', '5/1/2018', '5/3/2020', '5/3/2019', '5/3/2019', '5/3/2020']
})

# 定义status优先级映射
status_rank = {'Gold': 3, 'Silver': 2, 'Bronze': 1}
data['rank'] = data['status'].map(status_rank)

# 按id分组,取优先级最高的记录
result = data.sort_values('rank', ascending=False).groupby('id').first().reset_index()

# 输出目标格式
output = [f"{row['id']}-{row['status']}" for _, row in result.iterrows()]
print('、'.join(output))

逻辑说明

  1. 给每个status分配对应权重,等级越高权重值越大;
  2. 按权重降序排序,确保同一id下最高等级记录排在首位;
  3. 按id分组取第一条记录,即为该id的最高等级status;
  4. 拼接成要求的字符串格式输出。

方法2:SQL 实现

使用窗口函数筛选每组内的最高等级记录:

WITH ranked_data AS (
    SELECT 
        id,
        status,
        ROW_NUMBER() OVER (
            PARTITION BY id 
            ORDER BY 
                CASE status 
                    WHEN 'Gold' THEN 3 
                    WHEN 'Silver' THEN 2 
                    WHEN 'Bronze' THEN 1 
                END DESC
        ) AS rn
    FROM your_table_name
)
SELECT CONCAT(id, '-', status) AS result
FROM ranked_data
WHERE rn = 1;

逻辑说明

  1. PARTITION BY id 将数据按id分组;
  2. ORDER BY CASE 定义status的排序优先级,最高等级排在前面;
  3. ROW_NUMBER() 给每组内的记录编号,最高等级记录编号为1;
  4. 筛选编号为1的记录,拼接成目标格式输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:37:40