如何检测DataFrame每行时间与前一行是否相差10分钟并生成结果?
解决方案
假设你使用Python的Pandas库处理数据集,以下是适配10万+行大数据量的高效实现方式:
步骤1:合并日期与时间为完整时间戳
要正确处理跨天场景,必须先将date和time列合并为标准的datetime类型:
import pandas as pd # 合并date与time列,生成完整时间戳 df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'])
步骤2:按传感器分组计算时间差
不同传感器的时间序列独立,需按sensor_id分组后,计算当前行与同组前一行的时间差(单位:分钟):
# 分组计算相邻行的时间差,转换为分钟 df['time_diff_min'] = df.groupby('sensor_id')['datetime'].diff().dt.total_seconds() / 60
生成的time_diff_min列中,每组第一行因无前置数据会显示NaN,其余行值为两行的时间差(分钟)。
步骤3:生成10分钟间隔的布尔序列
针对跨天场景(如前一行是2024-05-20 23:50:00,下一行是2024-05-21 00:00:00),直接判断时间差是否等于10分钟即可。若你的业务逻辑支持循环计时(如间隔23小时50分即1430分钟也视为符合),可同时判断两种情况:
# 基础逻辑:仅判断时间差是否为10分钟(适配正常跨天) df['is_10min_interval'] = df['time_diff_min'] == 10.0 # 若需支持循环计时(如前一天16:58到当天15:08,实际为间隔23小时50分),可修改为: # df['is_10min_interval'] = df['time_diff_min'].isin([10.0, 1430.0])
注:你提到的16:58到15:08的例子,正常时间差为-110分钟,不符合10分钟间隔逻辑,推测是表述笔误,上述代码可正确处理23:58到00:08这类跨天10分钟间隔的场景。
性能说明
上述方法使用Pandas内置的分组与diff方法,避免了低效的循环遍历,能快速完成10万+行数据的计算。
内容的提问来源于stack exchange,提问作者Bartholomew
相关产品推荐
相关产品推荐

