如何为Pandas数据框计算相邻时间间隔并排查超时记录?
计算Pandas DataFrame时间间隔并识别超阈值记录
最简解决方案
直接用Pandas内置的diff()方法就能快速实现需求,代码如下:
import pandas as pd # 读取数据 df = pd.read_csv("temps.csv") # 转换time列为datetime类型 df['time'] = pd.to_datetime(df['time'], format="%Y-%m-%d %H:%M:%S") # 计算每行与上一行的时间间隔 df['elapsed'] = df['time'].diff() # 第一行无前置数据,将间隔设为0(也可以保留默认的NaT) df['elapsed'] = df['elapsed'].fillna(pd.Timedelta(0)) # 筛选出与上一条记录间隔超过15分钟的行 threshold = pd.Timedelta(minutes=15) over_threshold = df[df['elapsed'] > threshold] print(over_threshold)
你原有代码的问题
你用while循环时,每次执行df['elapsed'] = next_dt - start_dt都会把整个列的所有值覆盖成当前循环计算的单个差值,而非给对应行赋值。循环结束后,所有行的elapsed自然都是最后一次循环的结果,导致所有间隔值相同。
补充说明
diff()是Pandas专为相邻元素差值计算设计的方法,针对datetime类型会自动返回Timedelta对象,无需手动遍历索引;- 用
pd.Timedelta(minutes=15)可以直观定义15分钟的阈值,直接和elapsed列做比较即可筛选目标行。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

