Python 3.x 如何生成频率为周二至周六(含周二至周六)的日期范围?

Python 3.x 如何生成频率为周二至周六(含周二至周六)的日期范围?,python-3.x,pandas,datetime,range,datetimeindex,Python 3.x,Pandas,Datetime,Range,Datetimeindex,我试图用熊猫生成一个datetime索引,它有一个自定义的每日频率 目前,我可以生成以下datetime索引: 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',

我试图用熊猫生成一个datetime索引,它有一个自定义的每日频率

目前,我可以生成以下datetime索引:

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')
但是,这将返回所有工作日。我想把所有的周二、周三、周四、周五和周六的时间都退回。也许这可以通过某种自定义设置或某种补偿来实现?具体来说,是否有一种直接使用日期范围功能和频率输入的方法?如果没有,如何最简单地实现这一点


谢谢

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

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

DatetimeIndex(['2020-08-28', '2020-08-29', '2020-09-01', '2020-09-02',
               '2020-09-03', '2020-09-04', '2020-09-05', '2020-09-08',
               '2020-09-09', '2020-09-10', '2020-09-11', '2020-09-12',
               '2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
               '2020-09-19', '2020-09-22', '2020-09-23', '2020-09-24',
               '2020-09-25', '2020-09-26', '2020-09-29', '2020-09-30'],
              dtype='datetime64[ns]', freq=None)
编辑:您还可以定义您的
CustomBusinessDay

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

使用
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])]


这会损失第一天,但会在最后增加一天。我确实看到,这实际上与生成原始索引,然后以“B”的频率将其移动1相同。我想我是在试图避免这一点,然后需要进一步的代码来整理datetimeindex的前后部分。您提供的编辑是一个更清晰的解决方案。谢谢。这需要包括1,虽然正确。这个idx[s.isin([2,3,4,5])应该是idx[s.isin([1,2,3,4,5])。这是我最初的想法,但它似乎包括星期天,当我用2,3,4,5,6运行它时。
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)