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

如何在pandas和SQL中筛选x列不含0的唯一product值

筛选所有x列取值均不含0的product实现方案

问题说明

原有实现逻辑错误:test.query("select distinct (product) where x not in (0) ")存在两个问题:

  1. 混淆了pandas query()方法的语法规则,该方法不支持直接写原生SQL语句
  2. 逻辑上仅匹配存在x不等于0的product,会把同时存在x=0记录的product(如示例中的a)错误命中,不符合需求。

Pandas 正确实现

核心逻辑:按product分组后,校验每个分组下的所有x值是否都不等于0,保留符合条件的分组后去重即可。

写法1:groupby + filter

# 得到符合要求的product去重结果
res = test.groupby('product').filter(lambda group: (group['x'] != 0).all())['product'].unique()

输出结果为['b', 'c'],符合预期。

写法2:groupby + transform

res = test[test.groupby('product')['x'].transform(lambda x: (x != 0).all())]['product'].unique()

SQL 正确实现

核心逻辑:按product分组后,通过HAVING条件过滤掉存在x=0记录的分组。

通用写法(兼容所有SQL数据库)

SELECT product
FROM test
GROUP BY product
HAVING SUM(CASE WHEN x = 0 THEN 1 ELSE 0 END) = 0;

简化写法(支持布尔值转数值的数据库如MySQL、PostgreSQL可用)

SELECT product
FROM test
GROUP BY product
HAVING MAX(x = 0) = 0;

两种写法均会返回b、c两个结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:54:03