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

如何删除Dataframe中label1、label2、label3值相同的行?

问题分析与解决方法

原代码的核心问题是无法处理三个标签全为NaN的行——因为在Python中,NaN == NaN会返回False,这类行不会被原代码的条件匹配到,导致删不掉。

下面给出两种可行的替代方案:

方案1:用nunique()统一判断

直接通过每行三个标签的唯一值数量来识别是否需要删除:

# 保留三个标签不全相同的行
df = df[~df[['label1', 'label2', 'label3']].apply(lambda x: x.nunique(dropna=False) == 1, axis=1)]
  • 原理:nunique(dropna=False)会把NaN算作一个独立值,当三个标签完全相同时(不管是全0、全1还是全NaN),唯一值数量都是1;
  • ~符号用来取反,筛选出不满足“三个标签全相同”的行。

方案2:拆分条件覆盖全NaN场景

把“全NaN”和“非NaN值全相同”两种情况分开判断,再合并条件:

# 定义需要删除的行的条件
delete_condition = (df[['label1', 'label2', 'label3']].isna().all(axis=1)) | \
                   ((df['label1'] == df['label2']) & (df['label1'] == df['label3']))
# 删除符合条件的行
df = df[~delete_condition]
  • 第一个条件isna().all(axis=1)专门识别三个标签全为NaN的行;
  • 第二个条件就是你原来的逻辑,处理非NaN值全相同的情况;
  • 用|(逻辑或)把两个条件合并,再取反保留需要的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:01:06