按条件为Pandas DataFrame创建新列时出现ValueError错误如何解决
错误原因
df_last['Block_No.']返回的是pandas的Series类型(一整列数据),直接用==判断得到的是布尔类型的Series,不是单个True/False值,Python的if语句无法直接判断一整个布尔序列的真假,所以会抛出这个歧义错误。
另外你现有代码还有两个逻辑问题:
- 循环内每次直接执行
df_last['Rep_Rate'] = rep是给整列赋值同一个值,最终整列结果只会等于最后一次循环计算的rep值 - 你描述的需求是Block_No.为1时Patch等于3赋值4,但代码里判断的是Patch等于1,和需求不符
正确实现
pandas支持向量化操作,不需要写循环即可完成条件赋值,效率远高于遍历:
方案1:匹配你描述的需求
仅Block_No.等于1且Patch等于3时Rep_Rate赋值为4,其余场景全为0:
# 先给整列赋默认值0 df_last['Rep_Rate'] = 0 # 筛选满足条件的行赋值为4 df_last.loc[(df_last['Block_No.'] == 1) & (df_last['Patch'] == 3), 'Rep_Rate'] = 4
方案2:匹配你代码里的多条件逻辑
如果实际需要覆盖代码里Block_No.为0、1、3的判断逻辑,可按如下方式写:
df_last['Rep_Rate'] = 0 # Block_No.为0或3时,Patch等于1赋值8 df_last.loc[(df_last['Block_No.'].isin([0, 3])) & (df_last['Patch'] == 1), 'Rep_Rate'] = 8 # Block_No.为1时,Patch等于1赋值4 df_last.loc[(df_last['Block_No.'] == 1) & (df_last['Patch'] == 1), 'Rep_Rate'] = 4
注意条件两侧必须加括号,且多个条件之间用&(且)/|(或)连接。
内容的提问来源于stack exchange,提问作者Kshtj
相关产品推荐
相关产品推荐

