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

如何在Pandas DataFrame中实现“从不包含指定值”的筛选

嘿,我来帮你搞定这个数据筛选的问题!你需要找出那些完全没有West记录的Id对应的所有行对吧?这里有几种常用的SQL实现方式,都能精准得到你想要的结果:

方法1:使用NOT EXISTS子查询(推荐,性能优异)

这种方法逻辑最直观——直接检查当前Id是否不存在任何Item为West的记录,数据库优化器通常会对这种写法做很好的优化:

SELECT t1.Id, t1.Item
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.Id = t1.Id
      AND t2.Item = 'West'
);

方法2:GROUP BY + HAVING筛选Id后关联

先通过分组统计,筛选出从未出现过West的Id列表,再和原表关联获取这些Id的所有记录:

SELECT t.Id, t.Item
FROM your_table t
INNER JOIN (
    SELECT Id
    FROM your_table
    GROUP BY Id
    -- 统计当前Id下West出现的次数,等于0说明从未出现
    HAVING COUNT(CASE WHEN Item = 'West' THEN 1 END) = 0
) filtered_ids ON t.Id = filtered_ids.Id;

也可以换一种HAVING的写法,逻辑是一样的:

SELECT t.Id, t.Item
FROM your_table t
WHERE t.Id IN (
    SELECT Id
    FROM your_table
    GROUP BY Id
    HAVING SUM(CASE WHEN Item = 'West' THEN 1 ELSE 0 END) = 0
);

方法3:LEFT JOIN排除法

通过左连接匹配出有West记录的Id,然后排除这些Id的所有行:

SELECT t1.Id, t1.Item
FROM your_table t1
LEFT JOIN your_table t2 
    ON t1.Id = t2.Id 
    AND t2.Item = 'West'
-- 左连接后如果t2.Id为空,说明该Id没有West记录
WHERE t2.Id IS NULL;

执行以上任意一种查询,都会返回你期望的结果:
Id Item
2 North
2 South
2 East
3 North
3 East

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:29