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

Pandas中使用|运算符筛选价格最值行返回空数据集求助

问题根源:运算符优先级搞的鬼!

嘿,这个问题我碰到过好多次啦——你代码里的问题完全是Python运算符优先级在捣乱!

为什么你的一行代码返回空?

在Python中,位运算符|的优先级高于比较运算符==。所以你写的:

df[df['price'] == (df['price'].min()) | (df['price'].max())]

实际上被Python解释成了:

df[df['price'] == (df['price'].min() | df['price'].max())]

也就是先对最小价格和最大价格做位运算,得到一个和业务逻辑无关的数值,再用这个数值和price列做比较——这显然和你想要的“筛选出价格等于最小值 OR 最大值”的逻辑完全不符,自然返回空数据集。

正确的写法

你需要给每个比较表达式单独加上括号,确保先执行比较(得到布尔值序列),再执行逻辑或操作:

df[(df['price'] == df['price'].min()) | (df['price'] == df['price'].max())]

这样就能正确筛选出价格为最小或最大值的行了。

为什么拆分执行能成功?

当你拆分写的时候:

df1 = df[df['price'] == df['price'].min()]
df2 = df[df['price'] == df['price'].max()]
df3 = pd.concat([df1, df2], ignore_index=True)

每一步都是先完成了==比较,得到正确的布尔索引,然后直接把两个结果拼接起来,完全避开了运算符优先级的坑,所以能得到预期的4行数据。

更简洁的替代方案

其实还有个更直观的写法,用isin()方法,完全不用考虑运算符优先级:

df[df['price'].isin([df['price'].min(), df['price'].max()])]

这个写法可读性更高,也不容易出错~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:29