Python循环比较日期列生成分类值时Series真值模糊错误如何解决
报错原因
你遇到的报错核心原因是:if pl['SampleReceivedDate'] != pl['JobCreationDate'] 这行代码中,两个DataFrame列做比较返回的是布尔类型的Series对象(每一行的对比结果组成的序列),而if判断只能接收单个布尔值,无法判定一整个序列的真假,因此触发该错误。
同时你现有的代码逻辑也存在两处明显问题:
- 使用
iterrows遍历时,没有用到迭代取出的行数据,每次循环依然是对整列做比较,没有实现行粒度的判断 pl.loc['same_jb_sr']是选取索引值为same_jb_sr的行,不是对same_jb_sr列的每一行赋值,完全不符合需求
正确实现方案
Pandas支持向量化运算,不需要手动写循环,一行代码即可完成需求:
如果你需要两个日期相等时返回1,不等返回0(符合列名same_jb_sr的字面含义),使用如下代码:
pl['same_jb_sr'] = (pl['SampleReceivedDate'] == pl['JobCreationDate']).astype(int)
如果你需要反过来两个日期不等时返回1,相等返回0,把判断条件改为不等于即可:
pl['same_jb_sr'] = (pl['SampleReceivedDate'] != pl['JobCreationDate']).astype(int)
实现逻辑说明
- 首先用比较运算符对两个日期列做逐行对比,得到布尔类型的Series,
True对应条件成立,False对应条件不成立 - 调用
astype(int)将布尔值转为整数,True自动转为1,False自动转为0,直接赋值给新列即可
内容的提问来源于stack exchange,提问作者Oge
相关产品推荐
相关产品推荐

