Pandas用Numpy实现if then else新增列写入自定义Yes/No值报错如何解决
问题解决方案
你触发的ValueError: list of cases must be same length as list of conditions报错,是因为np.select的入参规则要求:第一个参数条件列表condlist和第二个参数匹配结果列表choicelist长度必须完全一致,你当前代码中条件列表长度为1,但结果值"No"没有包裹为列表,才触发长度校验失败。
方案1:修正np.select写法
enterprisehr['Change_Dept'] = np.select( [enterprisehr['Dept_Descr'] == enterprisehr['Old_Dept_Descr']], ["No"], # 匹配结果要和条件列表长度一致,包裹为列表 default="Yes" )
方案2:更适合二分支场景的np.where实现(推荐)
你的需求是标准的二元判断逻辑,用np.where语法更简洁,专门针对If-Then-Else类场景设计:
# 语法为np.where(判断条件, 条件成立返回值, 条件不成立返回值) enterprisehr['Change_Dept'] = np.where( enterprisehr['Dept_Descr'] == enterprisehr['Old_Dept_Descr'], "No", "Yes" )
方案3:无Numpy依赖的Pandas原生实现
如果你不想引入Numpy依赖,也可以用Pandas的loc赋值实现:
# 先默认赋值为"Yes",再把两列相等的行替换为"No" enterprisehr['Change_Dept'] = "Yes" enterprisehr.loc[enterprisehr['Dept_Descr'] == enterprisehr['Old_Dept_Descr'], 'Change_Dept'] = "No"
以上三种方案都支持直接写入自定义字符串返回值,该场景完全可以用Numpy实现,二分支逻辑优先选择np.where写法更简洁易读。
内容的提问来源于stack exchange,提问作者Jonnyboi
相关产品推荐
相关产品推荐

