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

如何在pandas中按优先级规则删除ID字段重复的行数据

pandas按指定优先级按ID去重实现方案

核心思路

  • 给每行按照规则计算优先级:同时存在Phone、Email有效值的行优先级最高,其余行优先级更低
  • 按ID分组后,取每个分组内优先级最高的行即可

完整实现代码

如果你的数据里的null是字符串类型的'null',需要先替换为pandas识别的空值NaN,再进行计算:

import pandas as pd
import numpy as np

# 构造测试数据集,如果你是从csv读取直接用 pd.read_csv(你的文件路径) 即可
data = {
    'ID': ['0001', '0001', '0001'],
    'Phone': ['0234+', np.nan, '0234+'],
    'Email': [np.nan, 'a@.com', 'a@.com']
}
df = pd.DataFrame(data)

# 如果你的数据中空值是字符串'null',先执行替换:
# df = df.replace('null', np.nan)

# 1. 新增优先级列:两个字段都非空的优先级为1,其余为2,数值越小优先级越高
df['priority'] = np.where(df['Phone'].notna() & df['Email'].notna(), 1, 2)

# 2. 先按优先级升序排序,再按ID去重,保留每个ID的第一行
df_result = df.sort_values('priority').drop_duplicates('ID', keep='first').drop(columns='priority')

print(df_result)

输出结果说明

运行上述代码后输出结果如下,会优先保留ID为0001的完整行:

ID  Phone   Email
2  0001  0234+  a@.com

特殊场景说明

  • 如果同个ID下存在多行同时满足Phone和Email都非空,会默认保留排序后的第一行,如果你有其他额外优先级规则,可以在sort_values里新增排序字段,比如df.sort_values(['priority', '其他字段'])
  • 如果同个ID下没有两个字段都非空的行,会自动保留优先级为2的任意一行,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:02