Pandas创建Time列变化标识时Boolean值全部返回True问题求解
问题原因分析
你的代码出现全为True的错误主要有两个核心问题:
- 你用
eq(1)匹配Time的差值,但你的样例中Time从209012425跳到209012428时差值为3,无法被eq(1)匹配,不符合实际需求。 - 你添加了
where(wholedf['TIME']==0)和where(wholedf['TIME'] == 1)的过滤条件,但你的Time列数值均为2亿左右的大数值,不存在等于0或1的情况,导致where运算后所有值都为NaN,而NaN转为布尔值时默认是True,最终输出全为True。
正确实现代码
只需要判断当前行的Time值和上一行是否不同即可,一行代码就能实现:
wholedf['Change'] = wholedf['Time'].diff().ne(0).fillna(False)
diff()方法会计算当前行与上一行Time列的差值ne(0)表示判断差值是否不等于0,等于0说明Time没有变化,返回False;不等于0说明Time发生了变化,返回Truefillna(False)是处理第一行的diff结果为NaN的情况,将第一行的Change值设为False,符合你的预期输出要求。
如果你的实际列名是大写的TIME,把代码里的Time替换为TIME即可。
内容的提问来源于stack exchange,提问作者Leopold Wahlbeck
相关产品推荐
相关产品推荐

