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

基于前一行值分组连续事件:DataFrame数据处理需求

事件合并需求

现有存储事件的DataFrame,原始数据如下:

start_eventend_event
12023-09-23 17:202023-09-23 17:40
22023-09-24 10:002023-09-24 10:20
32023-09-24 10:202023-09-24 10:40
42023-09-24 10:402023-09-24 11:00
52023-09-25 11:002023-09-25 11:20
62023-09-25 11:202023-09-25 11:40

已知每个事件的start_event与end_event间隔恒为20分钟,需将前一事件结束后立即启动的连续事件进行分组合并,合并后事件最长时长为1小时,单日可包含多个事件。期望得到的分组后数据如下:

start_eventend_event
12023-09-23 17:202023-09-23 17:40
22023-09-24 10:002023-09-24 11:00
32023-09-25 11:002023-09-25 11:40

解决步骤(基于Pandas)

  1. 转换时间格式:确保时间列转为datetime类型,方便后续计算。
  2. 标记连续事件组:先识别非连续的分界点,再拆分出时长不超过1小时的子组(每个子组最多含3个20分钟事件)。
  3. 分组聚合:按最终分组键,取每组的起始时间和结束时间。

代码实现

import pandas as pd

# 构造原始数据
data = {
    'start_event': ['2023-09-23 17:20', '2023-09-24 10:00', '2023-09-24 10:20', 
                   '2023-09-24 10:40', '2023-09-25 11:00', '2023-09-25 11:20'],
    'end_event': ['2023-09-23 17:40', '2023-09-24 10:20', '2023-09-24 10:40', 
                 '2023-09-24 11:00', '2023-09-25 11:20', '2023-09-25 11:40']
}
df = pd.DataFrame(data)

# 转换为datetime类型
df['start_event'] = pd.to_datetime(df['start_event'])
df['end_event'] = pd.to_datetime(df['end_event'])

# 标记连续事件组
df['is_break'] = df['start_event'] != df['end_event'].shift(1)
df['group'] = df['is_break'].cumsum()
# 拆分出不超过1小时的子组(3个20分钟事件为一组)
df['sub_group'] = df.groupby('group').cumcount() // 3
df['final_group'] = df['group'].astype(str) + '_' + df['sub_group'].astype(str)

# 聚合得到结果
result = df.groupby('final_group').agg(
    start_event=('start_event', 'first'),
    end_event=('end_event', 'last')
).reset_index(drop=True).reset_index(drop=False)
result['index'] += 1  # 索引从1开始

print(result)

输出结果

index         start_event           end_event
0      1 2023-09-23 17:20:00 2023-09-23 17:40:00
1      2 2023-09-24 10:00:00 2023-09-24 11:00:00
2      3 2023-09-25 11:00:00 2023-09-25 11:40:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:15:16