python - 在 pandas 中查找连续分钟

标签 python python-3.x pandas datetime

我正在关注这篇文章 - 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/

相关文章:

Python获取json中的值

python - 使用 Graphicsmagick 或 pgmagick 进行洪水填充

python - 计算 Python3 中列表的相等元组元素

django - python - Django内置登录 View 不重定向到下一个

python - 根据另一列的值从一列复制值

python - 尝试使用 pandas 从网站中提取 html 表

python - 为什么我的 __init__.py 在模块中不起作用?

django - 测试Django电子邮件以进行错误处理报告

unit-testing - 你如何对 Python DataFrames 进行单元测试

python - 按整数索引 Pandas 数据帧