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

Pandas如何删除同时满足col1重复且col2为null的行

错误原因

你的代码逻辑和需求不匹配,存在三处问题:

  • 条件写反:删除条件要求col2为null,你写的df['col2'].notna()是匹配col2非空的行
  • 重复判定规则不对:duplicated()默认keep='first',只会标记重复值中除第一次出现外的后续行,无法覆盖所有col1值存在重复的记录
  • 筛选逻辑偏差:直接取m1 & m2会误删col2为空但col1无重复的有效行(比如测试数据里index=2的A2行)

正确代码

核心思路是先定位同时满足两个删除条件的行,再取反保留其余所有行:

import pandas as pd
import numpy as np

d = {'col1': ['A1', 'B4', 'A2', 'A1', 'B4', 'B4'], 'col2': [np.nan, 'ref4', np.nan, 'ref3', 'ref1', 'ref3']}
df = pd.DataFrame(data=d)

# 定位需要删除的行:col1存在重复值 & col2为空
to_drop = df['col1'].duplicated(keep=False) & df['col2'].isna()
# 保留不需要删除的行
df = df[~to_drop]

print(df)

运行输出完全符合预期:

col1  col2
1   B4  ref4
2   A2   NaN
3   A1  ref3
4   B4  ref1
5   B4  ref3

参数说明:duplicated(keep=False)会把所有对应值出现次数≥2的行都标记为重复,如果你实际需求是只删除重复项中非首次出现、且col2为空的行,去掉keep=False用默认参数即可,可根据业务场景调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:33:40