如何使用pandas快速生成工作日工时区间IntervalIndex?
实现方案
完全可以用极简代码实现需求,优先推荐date_range+IntervalIndex.from_arrays的组合写法,仅需两行代码就能生成任意时间范围内所有工作日对应的9点~18点工时区间索引,完全符合DRY原则:
import pandas as pd # 先拿到指定范围内所有工作日的日期基准 work_days = pd.date_range(start='2021-08-01', end='2021-08-31', freq='B') # 批量生成对应工作日9点到18点的区间索引 work_hours_ii = pd.IntervalIndex.from_arrays( left=work_days + pd.Timedelta(hours=9), right=work_days + pd.Timedelta(hours=18) )
输出结果和你手动逐个创建Interval对象得到的格式完全一致,以你示例中的2021-08-25、2021-08-26两天为例,返回结果如下:
IntervalIndex([(2021-08-25 09:00:00, 2021-08-25 18:00:00], (2021-08-26 09:00:00, 2021-08-26 18:00:00]], closed='right', dtype='interval[datetime64[ns]]')
如果需要调整时间范围,仅修改date_range的start和end参数即可,哪怕生成整年度的工时索引也不需要改动其他逻辑。
如果你偏好使用interval_range实现,也可以通过自定义偏移量参数完成,写法如下:
work_hours_ii = pd.interval_range( start=pd.Timestamp('2021-08-01 09:00:00'), end=pd.Timestamp('2021-08-31 18:00:00'), freq=pd.offsets.BDay(hour=9), closed='right' ).map(lambda x: pd.Interval(x.left, x.left + pd.Timedelta(hours=9), closed='right'))
内容的提问来源于stack exchange,提问作者RealGecko
相关产品推荐
相关产品推荐

