按小时分组统计时间间隔,处理跨天重叠场景
按小时时段统计跨天时间间隔的数量问题
需要统计月度周期内的小时时间间隔数量,仅按时间而非日期分组。例如:
| 日期 | 开始时间 | 结束时间 |
|---|---|---|
| 23-02-2023 | 12:10:00 | 12:34:00 |
| 24-02-2023 | 12:15:00 | 12:45:00 |
在12:00:00至12:59:59时段的计数为2。
样本数据
| first_appear | last_appear |
|---|---|
| 12:10:00 | 12:31:00 |
| 12:33:49 | 13:29:12 |
| 15:30:20 | 18:40:30 |
| 20:12:20 | 23:10:20 |
| 23:34:20 | 6: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:00 | 0 |
| 0 days 01:00:00 | 0 |
| 0 days 02:00:00 | 0 |
| 0 days 03:00:00 | 0 |
| 0 days 04:00:00 | 0 |
| 0 days 05:00:00 | 0 |
| 0 days 06:00:00 | 0 |
| 0 days 07:00:00 | 0 |
| 0 days 08:00:00 | 0 |
| 0 days 09:00:00 | 0 |
| 0 days 10:00:00 | 0 |
| 0 days 11:00:00 | 0 |
| 0 days 12:00:00 | 2 |
| 0 days 13:00:00 | 1 |
| 0 days 14:00:00 | 0 |
| 0 days 15:00:00 | 1 |
| 0 days 16:00:00 | 1 |
| 0 days 17:00:00 | 1 |
| 0 days 18:00:00 | 1 |
| 0 days 19:00:00 | 0 |
| 0 days 20:00:00 | 1 |
| 0 days 21:00:00 | 1 |
| 0 days 22:00:00 | 1 |
| 0 days 23:00:00 | 1 |
| 1 days 00:00:00 | 0 |
理想补充输出
希望输出中包含以下跨天时段的计数:
| 时间 | 计数 |
|---|---|
| 1 days 01:00:00 | 1 |
| 1 days 02:00:00 | 1 |
| 1 days 03:00:00 | 1 |
| 1 days 04:00:00 | 1 |
| 1 days 05:00:00 | 1 |
| 1 days 06:00:00 | 1 |
参考了多个Stack Overflow回答编写此代码,@riley在《Group and count by time interval - Python》中的回答提供了初始思路。
内容的提问来源于stack exchange,提问作者Abhijit Mazumder
相关产品推荐
相关产品推荐

