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

如何基于timestamp按2分钟间隔批量拆分pandas DataFrame

实现方法

完全可以实现,用生成器封装分块逻辑即可,天然支持逐次返回下一个时间区间的批次数据,具体步骤如下:

  1. 预处理阶段先将@timestamp字段转换为pandas原生datetime类型,按时间升序排序避免乱序数据导致分块错误
  2. 以数据集最早时间为起点(也可按需对齐自然时钟整点),给每条记录打上对应的2分钟窗口标签
  3. 按窗口标签分组,通过生成器逐次返回对应分组的DataFrame,返回时移除临时添加的标签字段,保持和原始数据结构一致

完整代码

import pandas as pd

def get_2min_window_generator(raw_df):
    # 复制原数据避免修改输入对象
    process_df = raw_df.copy()
    # 转换时间字段格式
    process_df['@timestamp'] = pd.to_datetime(process_df['@timestamp'])
    # 按时间升序排序
    process_df = process_df.sort_values('@timestamp').reset_index(drop=True)
    
    # --- 窗口规则二选一即可 ---
    # 规则1:以数据最早时间为起点计算连续2分钟窗口
    start_ts = process_df['@timestamp'].min()
    process_df['window_tag'] = ((process_df['@timestamp'] - start_ts).dt.total_seconds() // 120).astype(int)
    
    # 规则2:对齐自然时间的2分钟窗口(如xx:00-xx:02、xx:02-xx:04),需要的话注释掉上面的规则,放开下面这行
    # process_df['window_tag'] = process_df['@timestamp'].dt.floor('2min')
    
    # 逐次返回每个窗口的批次数据
    for _, batch in process_df.groupby('window_tag', sort=True):
        yield batch.drop(columns=['window_tag']).reset_index(drop=True)

使用方式

  • 首次传入完整原始DataFrame初始化生成器:
    batch_generator = get_2min_window_generator(original_full_df)
  • 每调用一次next()就返回下一个2分钟区间的DataFrame:
# 第一个2分钟区间数据
batch1 = next(batch_generator)
# 第二个2分钟区间数据
batch2 = next(batch_generator)
  • 所有批次遍历完成后,调用next()会抛出StopIteration异常,也可以直接用for循环批量处理所有分块:
for batch_df in batch_generator:
    # 在这里写单批次数据的处理逻辑
    print(f"当前批次共 {len(batch_df)} 行数据")

注:代码中已经对两种常见的2分钟窗口规则做了标注,根据自己的业务需求选择即可,不需要额外调整其他逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:15:30