基于目标类优先级条件删除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
相关产品推荐
相关产品推荐

