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

基于两列条件的Pandas DataFrame数据筛选问题

如何正确筛选移除Pandas DataFrame中同时满足Name='RACHEL'且Job='CHEF'的行

首先,我们先明确你的核心需求:只移除同时满足Name = 'RACHEL'且Job = 'CHEF'的行,其余所有行全部保留。你的原始DataFrame构造代码如下:

import pandas as pd

data = pd.DataFrame({
    'Name': ['RACHEL', 'MONICA', 'PHOEBE', 'ROSS', 'CHANDLER', 'JOEY', 'RACHEL', 'RACHEL'],
    'Age': [30, 35, 37, 33, 34, 30, 30, 15],
    'Salary': [100000, 93000, 88000, 120000, 94000, 95000, 100000, 10],
    'Job': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY', 'IT', 'ARTIST', 'DESIGNER', 'CHEF']
})

分析你之前的错误代码

你尝试的筛选代码:

data = data.loc[ (data.Name != 'RACHEL') & (data.Job != 'CHEF') ]

这个逻辑是保留所有Name不是RACHEL并且Job不是CHEF的行,这会错误地过滤掉所有Name为RACHEL的行(哪怕Job不是CHEF),以及所有Job为CHEF的行(哪怕Name不是RACHEL),完全不符合你的需求。

正确的筛选方法

我们需要排除的是同时满足两个条件的行,这里有两种简洁的实现方式:

方法1:直接取反“同时满足Name='RACHEL'且Job='CHEF'”的条件

通过~符号对目标条件取反,保留所有不满足该组合条件的行:

# 保留不满足(Name='RACHEL'且Job='CHEF')的所有行
filtered_data = data.loc[ ~((data.Name == 'RACHEL') & (data.Job == 'CHEF')) ]

方法2:利用德摩根定律转换条件

根据逻辑运算的德摩根定律,非(A且B) = 非A 或 非B,我们可以把条件转换成更易读的形式:

filtered_data = data.loc[ (data.Name != 'RACHEL') | (data.Job != 'CHEF') ]

两种方法都能得到你预期的结果:

Name  Age  Salary          Job
0    RACHEL   30  100000    DESIGNER
1    MONICA   35   93000       CHEF
2    PHOEBE   37   88000       MASUS
3      ROSS   33  120000  PALENTOLOGY
4  CHANDLER   34   94000         IT
5      JOEY   30   95000      ARTIST
6    RACHEL   30  100000    DESIGNER

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:44:13