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

如何用Pandas创建自定义工作日的小时频率偏移量?

问题描述

我希望创建一个偏移别名,覆盖自定义工作日的每一小时。例如,将周六和周日设为工作日,工作时段为00:00至24:00。

尝试使用CustomBusinessHour时遇到以下问题:

  • CustomBusinessHour(weekmask="Sat Sun", start="00:00", end="24:00")和CustomBusinessHour(weekmask="Sat Sun", start="00:00", end="00:00")均不被允许
  • 使用CustomBusinessHour(weekmask="Sat Sun", start="00:00", end="23:59")时,执行代码后每过完一天会多出1分钟的偏移
  • 不指定start和end参数时,默认会使用9:00-17:00的时段

请问如何正确创建这类偏移别名?或者是否有办法将Hour偏移与CustomBusinessDay结合使用?

解决方案

方法一:拆分逻辑,结合CustomBusinessDay与Hour偏移

这种方式更直观,完全贴合需求:先筛选出自定义工作日,再为每个工作日生成全天24小时的时间点。

import pandas as pd
import datetime as dt

# 定义自定义工作日规则:仅周六、周日为工作日
custom_bday = pd.offsets.CustomBusinessDay(weekmask='Sat Sun')
# 生成指定区间内的所有自定义工作日日期
business_days = pd.date_range(dt.datetime(2020,1,1), dt.datetime(2020,1,15), freq=custom_bday)
# 为每个工作日生成0-23点的小时序列,再合并排序
hourly_sequences = [pd.date_range(day, day + dt.timedelta(hours=23), freq='H') for day in business_days]
final_hourly_range = pd.concat(hourly_sequences).sort_values()

print(final_hourly_range)

方法二:修正CustomBusinessHour的时间边界

如果坚持要用CustomBusinessHour,可以把结束时间设为23:59:59来规避1分钟偏移问题,不过需要注意跨天场景的验证:

freq = pd.offsets.CustomBusinessHour(weekmask='Sat Sun', start='00:00', end='23:59:59')
hourly_range = pd.date_range(dt.datetime(2020,1,1), dt.datetime(2020,1,15), freq=freq)

这种方式边界处理容易出问题,更推荐第一种拆分实现的方案。

方法三:封装为可复用的自定义函数

如果需要重复使用该规则,可以封装成函数:

import pandas as pd
import datetime as dt

def custom_weekend_hourly(start_date, end_date):
    custom_bday = pd.offsets.CustomBusinessDay(weekmask='Sat Sun')
    business_days = pd.date_range(start_date, end_date, freq=custom_bday)
    hourly_sequences = [pd.date_range(day, day + dt.timedelta(hours=23), freq='H') for day in business_days]
    return pd.concat(hourly_sequences).sort_values()

# 调用示例
result = custom_weekend_hourly(dt.datetime(2020,1,1), dt.datetime(2020,1,15))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:15