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

如何基于不同行同名记录的起止时间差聚合时间序列数据

实现思路
  • 第一步:将所有记录按Name字段分组,不同名称的记录互不干涉
  • 第二步:对每个分组内的记录按startTime升序排序,保证时间顺序正确
  • 第三步:遍历排序后的分组记录,判断相邻两条是否符合合并条件:当前记录的startTime与上一条记录的endTime差值≤1小时,符合则合并,不符合则新增一条记录
  • 第四步:每个合并后的分组保留组内最早的startTime、最晚的endTime以及对应的Name,最终汇总所有合并结果得到目标表
代码实现

首先确保已经安装pandas库,未安装可以执行命令pip install pandas。

import pandas as pd

# 1. 读取数据,这里用示例数据演示,你可以替换为pd.read_csv()/pd.read_excel()读取你的本地文件
df = pd.DataFrame({
    'Name': ['A', 'A', 'A', 'B', 'B', 'C'],
    'startTime': ['2024-05-01 08:00:00', '2024-05-01 09:30:00', '2024-05-01 12:00:00', '2024-05-01 10:00:00', '2024-05-01 10:40:00', '2024-05-01 14:00:00'],
    'endTime': ['2024-05-01 09:10:00', '2024-05-01 11:20:00', '2024-05-01 13:00:00', '2024-05-01 10:30:00', '2024-05-01 11:30:00', '2024-05-01 15:00:00']
})

# 2. 转换时间字段为datetime类型,才能计算时间差值
# 如果你的时间格式不是标准的YYYY-MM-DD HH:MM:SS,可以加format参数指定,比如format='%d/%m/%Y %H:%M'
df['startTime'] = pd.to_datetime(df['startTime'])
df['endTime'] = pd.to_datetime(df['endTime'])

# 3. 按名称分组,每组内按开始时间升序排序
df = df.sort_values(by=['Name', 'startTime']).reset_index(drop=True)

# 4. 定义分组合并逻辑
def merge_continuous_records(group):
    merged_list = []
    for record in group.itertuples():
        if not merged_list:
            # 第一条记录直接加入结果
            merged_list.append({
                'Name': record.Name,
                'startTime': record.startTime,
                'endTime': record.endTime
            })
        else:
            last_record = merged_list[-1]
            # 计算时间差,单位为秒,3600秒等于1小时
            time_gap = (record.startTime - last_record['endTime']).total_seconds()
            if time_gap <= 3600:
                # 符合合并条件,更新结束时间为两者最大值
                last_record['endTime'] = max(last_record['endTime'], record.endTime)
            else:
                # 不符合条件,新增记录
                merged_list.append({
                    'Name': record.Name,
                    'startTime': record.startTime,
                    'endTime': record.endTime
                })
    return pd.DataFrame(merged_list)

# 5. 对每个名称分组应用合并逻辑,得到最终结果
result_df = df.groupby('Name', group_keys=False).apply(merge_continuous_records).reset_index(drop=True)

# 6. 查看结果,也可以用result_df.to_excel('合并结果.xlsx', index=False)导出到本地文件
print(result_df)
常见问题说明
  • 若运行时出现时间格式转换报错,调整pd.to_datetime的format参数匹配你的原始时间格式即可
  • 若需要调整合并的时间间隔阈值,修改time_gap <= 3600里的3600为对应秒数即可,比如2小时就改为7200

内容的提问来源于stack exchange,提问作者D.Banerjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:45:02