如何按列表条件过滤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
相关产品推荐
相关产品推荐

