如何生成频率为周二至周六的大熊猫日期范围?

问题描述

我正在尝试使用具有自定义每日频率的熊猫生成日期时间索引。

此刻,我可以生成以下日期时间索引:

import pandas as pd
import datetime as dt

pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30),freq='B')

DatetimeIndex(['2020-08-28','2020-08-31','2020-09-01','2020-09-02','2020-09-03','2020-09-04','2020-09-07','2020-09-08','2020-09-09','2020-09-10','2020-09-11','2020-09-14','2020-09-15','2020-09-16','2020-09-17','2020-09-18','2020-09-21','2020-09-22','2020-09-23','2020-09-24','2020-09-25','2020-09-28','2020-09-29','2020-09-30'],dtype='datetime64[ns]',freq='B')

但是,这将返回所有工作日。我想返回所有周二,周三,周四,周五和周六的日子。也许可以通过某种自定义设置或某种补偿来完成?具体来说,有没有一种方法可以直接使用date_range功能和freq输入来做到这一点?如果没有,如何最简单地实现?

谢谢!

解决方法

使用dayofweek

idx = pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30))
s = idx.dayofweek
idx[s.isin([2,3,4,5])]

DatetimeIndex(['2020-08-28','2020-08-29','2020-09-02','2020-09-03','2020-09-04','2020-09-05','2020-09-09','2020-09-10','2020-09-11','2020-09-12','2020-09-16','2020-09-17','2020-09-18','2020-09-19','2020-09-23','2020-09-24','2020-09-25','2020-09-26','2020-09-30'],dtype='datetime64[ns]',freq=None)
,

您可以仅使用Timedelta添加一天,但要更改所需的日期范围,则需要在创建边界时删除一天。

(pd.date_range(start=dt.datetime(2020,27),29),freq='B') 
  + pd.Timedelta(days=1))

DatetimeIndex(['2020-08-28','2020-09-01','2020-09-08','2020-09-15','2020-09-22','2020-09-29',freq=None)

编辑:您还可以定义CustomBusinessDay

cbd = pd.tseries.offsets.CustomBusinessDay(weekmask='Tue Wed Thu Fri Sat')
pd.date_range(start=dt.datetime(2020,30),freq=cbd)