Python中使用多个numpy where条件为DataFrame新增列并赋值
问题原因
- 逻辑运算符优先级错误:Python中
&优先级高于|,你原代码中(df['Employment']=='Salaried')|(df['Employment']=='Business')&其他条件的实际计算逻辑为就业类型为Salaried,或者(就业类型为Business且满足其他条件),和你需求中「就业类型为Salaried或Business,同时满足其他条件」的逻辑不符。 - 多次赋值覆盖结果:每一次执行
df['Result']=np.where(...)都会重写整列数据,不满足当前条件的行都会被赋值为空字符串,前几次的匹配结果会被后续操作直接覆盖,所以最终只有最后一行的条件生效。
修复方案
推荐使用numpy.select实现多条件分支赋值,逻辑更清晰,无需嵌套写法:
import numpy as np # 按顺序定义所有匹配条件 cond_list = [ # 条件1:返回No Issue (df['Employment'].isin(['Salaried', 'Business'])) & (df['Annual income of policy owner'] == '<= 10 lakh') & (df['STP flagging'] == 'NON STP'), # 条件2:返回No Issue (df['Employment'].isin(['Salaried', 'Business'])) & (df['Annual income of policy owner'] == '>10 lakh') & (df['STP flagging'] == 'STP'), # 条件3:返回Issue (df['Employment'].isin(['Salaried', 'Business'])) & (df['Annual income of policy owner'] == '>10 lakh') & (df['STP flagging'] == 'NON STP'), # 条件4:返回Issue (df['Employment'].isin(['Salaried', 'Business'])) & (df['Annual income of policy owner'] == '<= 10 lakh') & (df['STP flagging'] == 'STP') ] # 定义条件对应返回值,顺序和上面的条件一一对应 result_list = ['No Issue', 'No Issue', 'Issue', 'Issue'] # 赋值,不满足所有条件的行默认填充Null df['Result'] = np.select(cond_list, result_list, default='Null')
注意事项
请确认字段取值拼写完全一致,比如业务规则里的年收入取值是<=10 lakhs,代码里写的是<= 10 lakh,如果实际数据和代码里的取值不匹配会导致匹配失败。
内容的提问来源于stack exchange,提问作者KReEd
相关产品推荐
相关产品推荐

