如何在Python中根据Position列的取值生成指定规则的Role新列?
解决方案
问题分析
你当前的代码仅能区分"Chef"和其他所有情况,无法满足多规则分类需求,且条件判断写法有误(== ["Chef"]是与列表比较,应直接与字符串"Chef"比较)。我们需要按规则优先级依次判断,生成目标Role列。
实现代码
使用numpy.select处理多条件分支,按规则优先级设置条件与对应值:
import numpy as np import pandas as pd # 假设你的DataFrame名为df # 定义条件列表,注意顺序:先判断纯Chef,再判断含Collegial,最后判断含Assistant conditions = [ df['职位'] == 'Chef', df['职位'].str.contains('Collegial'), df['职位'].str.contains('Assistant') ] # 对应条件的结果值 values = ['One', 'Collegial', 'Assistant'] # 生成Role列 df['Role'] = np.select(conditions, values)
代码说明
- 条件顺序:先判断纯
Chef的情况,避免被后续包含Chef的其他职位(如Assistant Chef)干扰;接着判断含Collegial的情况,最后判断含Assistant的情况,确保规则优先级正确。 - str.contains:用于检测字符串中是否包含指定子串,满足"包含Collegial/Assistant"的规则要求。
- np.select:根据条件列表的顺序,匹配第一个满足的条件并返回对应值,完美适配多分支规则场景。
运行上述代码后,你的DataFrame将生成符合预期的Role列,与你给出的输出示例一致。
内容的提问来源于stack exchange,提问作者user20374625
相关产品推荐
相关产品推荐

