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

如何按列表条件过滤Pandas DataFrame并替换临时员工的Job值?

问题描述

现有如下Pandas DataFrame:

ID  Type                Job
1   Employee            Doctor
2   Contingent Worker   Doctor
3   Employee            Employee
4   Employee            Employee
5   Contingent Worker   Employee
6   Contingent Worker   Consultant
7   Contingent Worker   Trainee
8   Contingent Worker   SSS
9   Contingent Worker   Agency Worker
10  Contingent Worker   

针对Type为Contingent Worker的行,设定可接受的Job值列表:

valid_jobs = ['Agency Worker', 'Consultant']

需求:检查所有Type为Contingent Worker的行的Job值,若不在上述列表中或为空值,则将其替换为"Consultant",得到目标DataFrame。

最佳实现方案

使用Pandas的loc索引器结合条件判断是最直观且高效的实现方式,代码如下:

import pandas as pd

# 定义合法Job列表(避免用内置关键字`list`作为变量名)
valid_jobs = ['Agency Worker', 'Consultant']

# 假设原DataFrame名为df,执行替换操作
df.loc[
    (df['Type'] == 'Contingent Worker') & 
    (~df['Job'].isin(valid_jobs) | df['Job'].isna()),
    'Job'
] = 'Consultant'

代码逻辑说明

  • (df['Type'] == 'Contingent Worker'):精准筛选出所有临时员工的行
  • ~df['Job'].isin(valid_jobs):筛选出Job不在合法列表中的行
  • df['Job'].isna():筛选出Job为空(包括NaN或空字符串)的行
  • &和|分别代表逻辑“与”和“或”,通过括号明确条件优先级,确保仅对符合要求的临时员工行进行处理
  • loc直接定位目标行和列,赋值操作是Pandas中效率最高的批量修改方式之一

处理后的目标DataFrame

ID  Type                Job
1   Employee            Doctor
2   Contingent Worker   Consultant
3   Employee            Employee
4   Employee            Employee
5   Contingent Worker   Consultant
6   Contingent Worker   Consultant
7   Contingent Worker   Consultant
8   Contingent Worker   Consultant
9   Contingent Worker   Agency Worker
10  Contingent Worker   Consultant

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:03