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

Pandas教程:如何筛选两列值不同的行?

筛选DataFrame中列a与列b取值不同的行

嘿,这个需求在pandas里太常见了,我给你分享几种简单高效的实现方式,按需选用就行:

方法1:直观的布尔索引

这是最直接的写法,新手也能一眼看懂:

filtered_df = df[df['a'] != df['b']]

原理很简单:df['a'] != df['b']会生成一个布尔值的Series,其中True对应的就是列a和列b取值不同的行,用这个Series去索引原DataFrame,就能得到你要的结果。

方法2:用pandas的ne()方法(更优雅的链式写法)

ne()是not equal的缩写,和!=功能完全一致,但写法更贴合pandas的风格,处理复杂链式操作时更顺手:

filtered_df = df[df['a'].ne(df['b'])]

方法3:用query()方法(类SQL风格)

如果你习惯写SQL类的语句,query()会让代码更简洁易读:

filtered_df = df.query('a != b')

特殊情况:处理缺失值(NaN)

需要注意的是,在pandas中,NaN和任何值比较(包括和自己)都会返回False。如果你的数据里有缺失值,且希望把a或b为NaN的行也视为“取值不同”(毕竟NaN不等于任何有效数值),可以这样处理:

# 包含a≠b,或者a是NaN,或者b是NaN的行
filtered_df = df[(df['a'] != df['b']) | df['a'].isna() | df['b'].isna()]

举个实际例子

假设你的DataFrame是这样的:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'a': [1, 2, 3, np.nan, 5],
    'b': [1, 4, 3, 3, 6]
})

用上述缺失值处理的代码筛选后会得到:

a    b
1  2.0  4.0
3  NaN  3.0
4  5.0  6.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:48:40