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

Pandas中基于多列筛选行:两种命令为何结果不同?

Pandas筛选两列均大于0的行:两种写法的差异解析

首先创建示例DataFrame:

import pandas as pd
a = [0,0,1,1,2,7]
b = [1,0,0,1,1,4]
df = pd.DataFrame(list(zip(a,b)), columns = ('a','b'))

生成的DataFrame如下:

a   b
0   0   1
1   0   0
2   1   0
3   1   1
4   2   1
5   7   4

需求是筛选出a列和b列数值均大于0的所有行,但两种写法结果不同:

写法1:仅返回部分目标行

df[(df['a'] & df['b'])>0]

结果:

a   b
3   1   1
5   7   4

写法2:返回全部目标行

df[((df['a']>0) & (df['b']>0))]

结果:

a   b
3   1   1
4   2   1
5   7   4

差异原因

核心是**&的作用对象不同**:

  • 写法1中,df['a'] & df['b']是对两列的每个数值做按位与运算,而非逻辑判断。比如第4行的a=2(二进制10)和b=1(二进制01),按位与的结果是0,因此>0的判断为False,该行被过滤。
  • 写法2中,先通过df['a']>0和df['b']>0生成两个布尔序列(每个元素是True/False,代表是否大于0),再用&对这两个布尔序列做逻辑与运算,只要两列都大于0就保留该行,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:02:19