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

按条件为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:54:04