生成条件新列时遇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
相关产品推荐
相关产品推荐

