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

按小时分组统计时间间隔,处理跨天重叠场景

按小时时段统计跨天时间间隔的数量问题

需要统计月度周期内的小时时间间隔数量,仅按时间而非日期分组。例如:

日期开始时间结束时间
23-02-202312:10:0012:34:00
24-02-202312:15:0012:45:00

在12:00:00至12:59:59时段的计数为2。

样本数据

first_appearlast_appear
12:10:0012:31:00
12:33:4913:29:12
15:30:2018:40:30
20:12:2023:10:20
23:34:206:11:00

注意最后一条记录为跨天重叠的情况。

当前使用代码

import pandas as pd
import numpy as np

import staircase as sc

df = pd.read_csv('Overlapping Schedule - Sheet2.csv')
df["first_appear"] = pd.to_timedelta(df["first_appear"].map(str))
df["last_appear"] = pd.to_timedelta(df["last_appear"].map(str))

df["first_appear"] = df["first_appear"].dt.floor("H")
df["last_appear"] = df["last_appear"].dt.ceil("H")

sf = sc.Stairs(df, start="first_appear", end="last_appear")

sample_times = pd.timedelta_range("00:00:00", "24:00:00", freq=pd.Timedelta("1hr"))
sf(sample_times, include_index=True)

当前输出

时间计数
0 days 00:00:000
0 days 01:00:000
0 days 02:00:000
0 days 03:00:000
0 days 04:00:000
0 days 05:00:000
0 days 06:00:000
0 days 07:00:000
0 days 08:00:000
0 days 09:00:000
0 days 10:00:000
0 days 11:00:000
0 days 12:00:002
0 days 13:00:001
0 days 14:00:000
0 days 15:00:001
0 days 16:00:001
0 days 17:00:001
0 days 18:00:001
0 days 19:00:000
0 days 20:00:001
0 days 21:00:001
0 days 22:00:001
0 days 23:00:001
1 days 00:00:000

理想补充输出

希望输出中包含以下跨天时段的计数:

时间计数
1 days 01:00:001
1 days 02:00:001
1 days 03:00:001
1 days 04:00:001
1 days 05:00:001
1 days 06:00:001

参考了多个Stack Overflow回答编写此代码,@riley在《Group and count by time interval - Python》中的回答提供了初始思路。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:35:55