整天怎么定义CustomBusinessHour?

How define CustomBusinessHour all day long?

我分析了每天 24 小时(但不是全年)工作的设备每小时 运行,但我有以下错误:

from pandas.tseries.offsets import CustomBusinessHour

Use=CustomBusinessHour(
    start='00:00',
    end='24:00',
    weekmask=(1,1,1,1,1,1,0)
)

Use=CustomBusinessHour(
    start='00:00',
    end='00:00',
    weekmask=(1,1,1,1,1,1,0)
)

(或者end='23:59'做奇怪的事,每天一分钟)
(或者end='23:00'不合适,停在22:00而不是23:00)

您知道是否可以创建全天工作的 CustomBusinessHour 吗?

我的目标是在一年内完成一系列 小时 的工作: pd.date_range(dt.date(2020,1,1), dt.date(2021,1,1), closed='left', freq=Use)

提前致谢。

我绕过了这个问题,我使用 CustomBusinessDay 而不是 CustomBusinessHour

Use=CustomBusinessDay(weekmask=(1,1,1,1,1,1,0))

然后

Cal=pd.date_range(dt.date(2020,1,1),dt.date(2021,1,1),freq=Use,closed='left').to_series()

我转换成 Series 以便能够添加一天,因为 asfreq() 一到那一天就停止,它不会每小时都采样,直到一天结束。

Cal.loc[Cal.iloc[-1]+pd.Timedelta(days=1)]=Cal.iloc[-1]+pd.Timedelta(days=1)

最后,我每小时重新采样(我排除了一天后第一个小时的最后一个)

Cal=Cal.asfreq('H')[:-1].index

如果开始日期和结束日期之间的时间段包含非工作日,则接受的答案将不会给出预期的结果。这是因为 Series.asfreq() 将填补缺失的非工作日。

我的解决办法是分两步生成。得到我们想要的日子,然后为每一天建立一个每小时的系列并将它们连接在一起:

def custom_24h_day_date_range(start_date, end_date, n=1, holidays=None, weekmask="Mon Tue Wed Thu Fri"):
    freq = pd.offsets.CustomBusinessDay(
        n=n,
        holidays=holidays,
        weekmask=weekmask
    )
    days = pd.date_range(start_date, end_date, freq=freq)
    dates = (pd.date_range(d, d + pd.DateOffset(days=1), freq='H', closed='left') for d in days)
    return next(dates).union_many(dates)

显然,您可以对其进行扩展,使其尽可能灵活以满足您的需要。

遗憾的是,规范的 pandas 解决方案无法正常工作。