You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas按Event组计算包含3行及以上的最短时间间隔?

问题描述

给定如下Pandas DataFrame:

import pandas as pd

data = {
  "timeStamp": ['06:00:00', '06:03:00', '06:10:00', '06:30:00', '06:32:00', '06:02:00', '06:05:00', '06:06:00', '06:55:00', '06:00:00', '06:01:00', '06:20:00', '07:00:00'],
  "Event": ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'D']
}

df = pd.DataFrame(data)

需求:按每个Event分组,找出包含3行及以上数据的最短时间间隔。示例结果说明:

  • Event "A"的最短间隔为10分钟(从06:00:00到06:10:00)
  • Event "B"的最短间隔为4分钟(从06:02:00到06:06:00)
  • Event "C"的最短间隔为20分钟(从06:00:00到06:20:00)
  • Event "D"不存在符合条件的间隔

期望输出:

EventInterval
A00:10:00
B00:04:00
C00:20:00
DNA
解决方案

利用Pandas的时间运算、分组和滑动窗口特性,可以优雅实现需求,步骤如下:

  1. 转换时间格式:将字符串时间转为datetime类型,便于计算时间差
  2. 分组处理:按Event分组,对每组内的时间排序
  3. 滑动窗口计算间隔:用窗口大小为3的滑动窗口,计算每组内连续3条数据的首尾时间差
  4. 提取最小间隔:对每组的时间差取最小值,数据不足3条的标记为NA
  5. 格式化输出:将时间差转为HH:MM:SS格式

具体代码实现:

import pandas as pd

# 1. 转换时间列为datetime类型
df['timeStamp'] = pd.to_datetime(df['timeStamp'], format='%H:%M:%S')

def get_min_interval(group):
    # 组内数据不足3条,返回空值
    if len(group) < 3:
        return pd.NaT
    # 对时间排序
    sorted_times = group.sort_values()
    # 滑动窗口计算连续3条数据的首尾时间差
    intervals = sorted_times.rolling(window=3).apply(lambda x: x.iloc[-1] - x.iloc[0], raw=False)
    # 取非空的最小间隔
    return intervals.min()

# 分组计算最小间隔
result = df.groupby('Event')['timeStamp'].apply(get_min_interval).reset_index(name='Interval')

# 格式化时间差为HH:MM:SS,空值替换为NA
result['Interval'] = result['Interval'].apply(lambda x: x.strftime('%H:%M:%S') if pd.notna(x) else 'NA')

print(result)

运行输出:

Event  Interval
0     A  00:10:00
1     B  00:04:00
2     C  00:20:00
3     D        NA

实现优势

  • 用rolling(window=3)替代手动循环,代码简洁且性能高效
  • 原生支持时间差计算,无需额外处理时间转换逻辑
  • 自动处理数据量不足的边界情况,结果统一规范

内容的提问来源于stack exchange,提问作者Delopera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:47:20