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

Pandas如何统计时间阈值前后固定间隔区间的数据点数量

实现步骤

首先确认你的DataFrame中时间戳列已转换为pandas支持的datetime类型,再按如下逻辑实现:

  • 先定义基础参数:阈值、窗口时长、需要统计的阈值前后窗口数量
  • 生成所有时间窗口的边界值与对应可读标签
  • 用pd.cut给每个数据点匹配所属时间窗口
  • 按窗口分组统计数据点数量即可

完整可运行代码示例:

import pandas as pd
from datetime import datetime

# 基础参数定义
threshold = datetime(2022, 1, 3, 9)  # 预设的时间阈值
window_len = pd.Timedelta(minutes=15) # 单窗口时长,示例为15分钟
prev_window_num = 2 # 统计阈值前2个窗口(对应示例到8:30)
next_window_num = 2 # 统计阈值后2个窗口(对应示例到9:30)

# 生成窗口边界与标签
bin_edges = [threshold - i*window_len for i in range(prev_window_num, 0, -1)]
bin_edges += [threshold + i*window_len for i in range(0, next_window_num+1)]
window_labels = [
    f"{bin_edges[i].strftime('%H:%M')}-{bin_edges[i+1].strftime('%H:%M')}"
    for i in range(len(bin_edges)-1)
]

# 处理DataFrame,假设你的表名为df,时间戳列名为timestamp
df['timestamp'] = pd.to_datetime(df['timestamp']) # 强制转时间类型,避免类型错误
df['belong_window'] = pd.cut(
    df['timestamp'],
    bins=bin_edges,
    labels=window_labels,
    include_lowest=True,
    right=False # 区间规则为左闭右开,避免边界时间点重复统计,可根据自身需求调整
)

# 输出各窗口统计结果
window_count = df['belong_window'].value_counts().reindex(window_labels).fillna(0).astype(int)
print(window_count)

参数调整说明

  • 如果需要扩大/缩小统计范围,直接修改prev_window_num和next_window_num即可,例如需要统计阈值前后1小时的范围,两个参数都设为4即可(4*15分钟=60分钟)
  • 如果需要修改窗口长度,直接调整window_len的参数即可,例如1小时窗口可写为pd.Timedelta(hours=1)
  • 区间开闭规则可通过right和include_lowest参数调整,匹配你对边界时间点的统计要求即可
  • 上述方法不要求阈值落在整15分钟刻度上,即使阈值是任意时间点(比如9点07分),也能正确生成对齐阈值的连续等长窗口。如果需要严格对齐自然时间的15分钟刻度(即每小时0/15/30/45分为边界),可以直接用df.resample(rule='15min', on='timestamp').count()实现,再截取阈值前后需要的范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:40:01