【问题标题】:pandas: bdate_range first set sunday as first day of week熊猫:bdate_range 首先将星期日设置为一周的第一天
【发布时间】:2016-05-14 06:22:20
【问题描述】:

有没有办法获得将周日到周四视为工作日的营业日期范围,并且

示例输出:

>>> import pandas as pd
>>> pd.bdate_range('2016-5-10','2016-5-17')
DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-13',
           '2016-05-16', '2016-05-17'],
          dtype='datetime64[ns]', freq='B')

期望的输出:

DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
           '2016-05-16', '2016-05-17'],
          dtype='datetime64[ns]', freq='B')

【问题讨论】:

    标签: python pandas calendar


    【解决方案1】:

    你可以使用custom business days:

    weekmask = 'Sun Mon Tue Wed Thu'
    custombday = pd.offsets.CustomBusinessDay(weekmask=weekmask)
    
    print pd.bdate_range('2016-5-10','2016-5-17', freq=custombday)
    
    DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
                   '2016-05-16', '2016-05-17'],
                  dtype='datetime64[ns]', freq='C')
    

    【讨论】:

      【解决方案2】:

      您可以过滤掉您不想要的日子:

      dates=pd.date_range('2016-5-10','2016-5-17').to_frame(name='d')  # convert to frame so we can run query on it
      dates.query('d.dt.strftime("%a") not in ["Fri","Sat"]').index
      

      输出:
      DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
                     '2016-05-16', '2016-05-17'],
                    dtype='datetime64[ns]', freq=None)
      

      在这里,我正在使用查询进行过滤。你可以看到很容易只选择你想要的日子,而不是过滤掉。

      关于代码 -
      d.dt.strftime("%a")
      

      它只会将时间戳作为日期名称提供给您,例如 Sun Mon..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-18
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        • 2013-06-05
        相关资源
        最近更新 更多