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

生成条件新列时遇TypeError: boolean values of NA is ambiguous错误求助

问题解决思路
  • 你代码里的shift方向搞反了:需求是对比当前行与下一行,但shift(1)是拿当前行和上一行做比较,要改成shift(-1)才是和下一行对比。
  • 报错核心原因:哪怕原数据已经删除了NaN,shift(-1)后最后一行的对比结果会变成NaN(因为没有下一行),布尔运算遇到NaN就会触发这个歧义错误。
修正后的代码
# 对比当前行与下一行的TierType是否不同
tier_change = df_AC['TierType'] != df_AC['TierType'].shift(-1)
# 对比当前行与下一行的用户ID是否相同
sub_ID = df_AC["Subscriber Contact's My Avid ID"] == df_AC["Subscriber Contact's My Avid ID"].shift(-1) 
# 把布尔数组里的NaN填充为False,再执行逻辑与,最后生成新列
df_AC['Tier_Type_Change_Date'] = np.where((tier_change.fillna(False)) & (sub_ID.fillna(False)), 1, 0)
补充说明
  • fillna(False)是因为最后一行没有下一行,肯定不满足两个条件,直接设为False返回0即可。
  • 如果你的实际需求是对比当前行和上一行(和描述不符的情况),那依然用shift(1),但同样要给第一行的NaN填充为False,因为第一行没有上一行,也不满足条件。

内容的提问来源于stack exchange,提问作者Deke Marquardt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:06:04