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

如何基于时间戳将DataFrame拆分为多个子DataFrame?

按时间戳间隔拆分DataFrame为多个子DataFrame

给定包含content和timestamp字段的DataFrame,当某条记录与前一条的时间间隔超过6小时时,将该记录及后续间隔6小时内的所有行划为一组,最终拆分出多个子DataFrame。以下是具体实现步骤:


步骤说明与代码实现

1. 转换时间戳格式并排序

首先确保timestamp字段为datetime类型,同时按时间升序排列(即使假设数据已排序,这一步也能避免示例数据的混乱问题):

import pandas as pd

# 构造示例DataFrame
data = {
    'content': ['Content_100', 'Content_91', 'Content_49', 'Content_76', 'Content_42', 'Content_39', 'Content_76', 'Content_85'],
    'timestamp': ['2023-06-28 21:15:29.605277', '2023-07-10 21:15:29.605277', '2023-07-11 21:15:29.605277', '2023-06-22 21:15:29.605277', '2023-07-04 21:15:29.605277', '2023-07-04 21:15:29.605277', '2023-06-29 21:15:29.605277', '2023-06-27 21:15:29.605277']
}
df = pd.DataFrame(data)

# 转换为datetime类型并按时间排序
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values('timestamp').reset_index(drop=True)

2. 计算时间间隔并生成分组标签

用diff()计算相邻行的时间差,判断是否超过6小时,再通过cumsum()生成连续的分组ID:

# 计算相邻记录的时间差
time_diff = df['timestamp'].diff()
# 标记间隔超过6小时的位置(第一行设为True,作为第一个分组的起始)
group_split = time_diff > pd.Timedelta(hours=6)
group_split.iloc[0] = True
# 生成分组标签
df['group_id'] = group_split.cumsum()

3. 拆分为多个子DataFrame

通过groupby遍历分组,提取每个子DataFrame并存储:

# 拆分并存储所有子DataFrame
sub_dfs = []
for group_id, group_df in df.groupby('group_id'):
    # 移除临时的分组ID列
    sub_df = group_df.drop('group_id', axis=1)
    sub_dfs.append(sub_df)
    # 可选:打印查看每个分组
    print(f"分组{group_id}:")
    print(sub_df)
    print("---")

结果说明

运行代码后,sub_dfs列表中会存储所有拆分后的子DataFrame:

  • 每个子DataFrame内的记录,两两之间时间间隔均不超过6小时
  • 不同子DataFrame之间,后一组的第一条记录与前一组的最后一条记录时间间隔超过6小时

示例数据最终会拆分为6个分组,符合时间间隔的拆分规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:23