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

基于目标类优先级条件删除unique_id重复行的最优实现方法咨询

实现方案

你原本的映射排序思路逻辑清晰易维护,是很合理的实现,这里提供两种更简洁/高性能的优化方案:

方案1:有序分类类型优化原生排序逻辑

无需额外新增映射列,直接利用pandas有序分类类型的排序特性实现,代码更简洁:

import pandas as pd

# 示例数据构造
df = pd.DataFrame({
    'Unique_id': [111, 111, 111, 112, 112, 113],
    'target': ['Yes', 'Maybe', 'No', 'No', 'Maybe', 'No']
})

# 将target设为有序分类,优先级按传入顺序从高到低
df['target'] = pd.Categorical(df['target'], categories=['Yes', 'Maybe', 'No'], ordered=True)

# 排序后按Unique_id去重保留首行
df = df.sort_values('target').drop_duplicates('Unique_id', keep='first').sort_values('Unique_id')

运行后即可得到你需要的输出结果,后续如果要调整优先级,只需修改categories参数的顺序即可。

方案2:GroupBy直接筛选(无排序开销,适合大数据量)

如果你的数据集规模很大,排序的时间开销较高,可以用分组直接按优先级匹配的方式实现,时间复杂度更低:

def pick_target(group):
    # 按优先级依次匹配
    if 'Yes' in group.values:
        return 'Yes'
    elif 'Maybe' in group.values:
        return 'Maybe'
    else:
        return 'No'

result = df.groupby('Unique_id')['target'].apply(pick_target).reset_index()

这种方法不需要修改原数据类型,也不需要全局排序,数据量越大性能优势越明显。

两种方案输出结果都和你给出的期望结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:36:00