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
相关产品推荐
相关产品推荐

