我正在关注这篇文章 - Pandas output date, start and end time and event status given datetime continuity
帖子中提供了测试连续时间的示例。我需要在连续几分钟内进行测试。我将代码行从 3600 修改为 60(小时改为分钟)
#test consecutive minutes
df['g'] = df['Date'].diff().dt.total_seconds().div(60).ne(1)
最终结果在任何连续分钟内都返回 True。
Date meter g
2009-02-13 13:23:00 53.49 True
2009-02-13 13:24:00 64.91 True
2009-02-13 13:25:00 32.04 True
2009-02-13 13:26:00 45.94 True
2009-02-13 15:45:00 45.94 True
结果应该在哪里
Date meter g
2009-02-13 13:23:00 53.49 True
2009-02-13 13:24:00 64.91 False
2009-02-13 13:25:00 32.04 False
2009-02-13 13:26:00 45.94 False
2009-02-13 15:45:00 45.94 True
这里出了什么问题?
最佳答案
您的代码问题可能是由于浮点近似造成的?如果对值进行四舍五入,这个问题就可以解决:
pd.to_datetime(df['Date']).diff().dt.total_seconds().div(60).round().ne(1)
但是,有一个更好的方法,使用 Timedelta 比较属性:
df['g'] = pd.to_datetime(df['Date']).diff().ne('1min')
输出:
Date meter g
0 2009-02-13 13:23:00 53.49 True
1 2009-02-13 13:24:00 64.91 False
2 2009-02-13 13:25:00 32.04 False
3 2009-02-13 13:26:00 45.94 False
4 2009-02-13 15:45:00 45.94 True
对于您的初始问题(第一个和最后一个问题):
forward = pd.to_datetime(df['Date']).diff().ne('1min')
reverse = (-pd.to_datetime(df['Date']).diff(-1)).ne('1min')
df['g'] = forward|reverse
输出:
Date meter g
0 2009-02-13 13:23:00 53.49 True
1 2009-02-13 13:24:00 64.91 False
2 2009-02-13 13:25:00 32.04 False
3 2009-02-13 13:26:00 45.94 True
关于python - 在 pandas 中查找连续分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72711865/