【问题标题】:Pandas: Date range creationPandas:创建日期范围
【发布时间】:2020-07-30 10:02:11
【问题描述】:

我想在 Pandas 中创建一个考虑工作日的每月日期范围。

如:dt_range = pd.date_range(start='2017-12-20', periods=5, freq='M')

含义:从2017-12-20开始,每20日滚动一次,连续5个月,如果该滚动日期不是工作日,则取下一个滚动日期(但保留20日进行下一次观察)。

同样:在某个日期结束,向后滚动,每 20 次,持续 5 个月。 如:

dt_range = pd.date_range(end='2018-05-20', periods=5, freq='M')

我一直在咨询Pandas offset aliases 但是,我的思维方式似乎与他们的不同步,因为他们专注于月末,月开始,而我找不到简单的月度滚动。这有点信息过载,我相信它存在一种简单的方法,因此我想寻求一些帮助/指导来找到答案。

【问题讨论】:

    标签: python pandas date


    【解决方案1】:

    一种解决方法:

    dt_range = pd.date_range(start='2017-12-20', periods=5, freq='MS') + pd.DateOffset(days=18) + pd.tseries.offsets.BusinessDay(1)
    

    输出:

    DatetimeIndex(['2018-01-22', '2018-02-20', '2018-03-20', '2018-04-20',
                   '2018-05-21'],
                  dtype='datetime64[ns]', freq=None)
    

    我只是用date_range(.., freq='MS) 去一个月的第一天,然后我添加 18 天到第 19 天。然后我按照this SO post 中的描述使用offsets.BusinessDay 来查找下一个工作日。

    如果要包括开始日期,则必须提前一个月开始。这种行为有点奇怪,但很容易解释。

    【讨论】:

    • 谢谢,也许是有人用这个来改进 Pandas 的提示。我将采用您的答案,并稍作改动,例如假设 2017-12-01 作为开始,我需要执行以下操作才能获得正确的日期系列:roll_date = 1 dt_range = pd.date_range(start='2017-12-01', period=5, freq='MS ') + pd.DateOffset(days=roll_date-1) + pd.tseries.offsets.BusinessDay(-1) + pd.tseries.offsets.BusinessDay(1) ,当然,这不考虑修改后时间表
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2022-11-17
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2020-03-28
    相关资源
    最近更新 更多