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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:02