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

Pandas如何删除ID_Dets分组下ID_Dets_2含多唯一值的所有行

Pandas 分组过滤清洗实现

你要实现的清洗规则可以直接通过pandas内置的分组筛选能力完成,不需要写循环逐行判断。

基础实现(代码简洁易读)

直接使用groupby配套的filter方法,按分组维度判断是否保留:

# df是你原始的DataFrame数据集
cleaned_df = df.groupby('ID_Dets', group_keys=False).filter(
    lambda group: group['ID_Dets_2'].nunique() == 1
)

逻辑说明

  • 按ID_Dets字段对全量数据拆分分组
  • 对每个分组单独统计ID_Dets_2字段的去重后取值数量:nunique()默认自动忽略空值统计唯一值个数,如果你的场景需要把空值也算作一个独立取值,可以加参数dropna=False
  • 唯一值数量等于1的分组整组保留,唯一值数量大于1的分组整组删除,完全匹配你的规则要求
  • 对应你给出的示例:ID_Dets=0的分组下ID_Dets_2有0、1两个取值,nunique()返回2,不满足保留条件,对应索引16、17、18、19的4行会被全部过滤;其余分组的ID_Dets_2均只有1个唯一值,所有行正常保留。

大数据量优化写法

如果你的数据集行数达到百万级以上,用transform实现的版本性能会比filter更高,逻辑完全等价:

# 先给每一行标记其所属分组是否符合保留条件
keep_mask = df.groupby('ID_Dets')['ID_Dets_2'].transform('nunique') == 1
cleaned_df = df[keep_mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:45