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

如何获取Pandas DataFrame的无重叠时间窗口?

实现非重叠按需生成的固定时长时间窗口

你的需求是生成覆盖所有事件、非重叠、仅在必要时创建的固定时长时间窗口,rolling的滑动窗口会重叠,resample的固定频率会生成空窗口,都不符合要求。这里给出和你循环逻辑一致的Pandas矢量化实现,效率比循环更高:

步骤与代码

  1. 确保时间戳列是datetime类型(如果还不是的话)
  2. 用矢量化计算生成窗口结束时间,再筛选出窗口起始点
import pandas as pd
import numpy as np

# 预处理:转换时间戳为datetime类型
df['timestamps'] = pd.to_datetime(df['timestamps'])

# 计算每个事件作为窗口起始时的结束时间(+1秒)
candidate_end = df['timestamps'] + pd.Timedelta(seconds=1)

# 生成每个事件所在窗口的实际结束时间:
# 若当前事件时间 >= 上一个窗口结束时间,就更新为当前候选结束时间;否则沿用之前的窗口结束时间
window_ends = candidate_end.where(
    df['timestamps'] >= window_ends.shift(fill_value=pd.Timestamp.min),
    window_ends.shift(fill_value=pd.Timestamp.min)
).cummax()

# 筛选窗口起始点:窗口结束时间发生变化的位置,就是新窗口的开始
start_mask = window_ends != window_ends.shift(fill_value=pd.Timestamp.min)
start_of_windows = df['timestamps'][start_mask].tolist()

逻辑说明

  • 这个实现和你手动循环的逻辑完全一致:只有当事件超出上一个窗口的范围时,才会创建新窗口
  • 用cummax和where实现了循环里的new_time累积更新逻辑,避免了显式循环,处理大数据量时效率提升明显
  • 不会生成空窗口,只有存在事件的地方才会创建对应的窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:16:06