在熊猫中生成每个月的最后一个星期五

原文标题Generate last friday of each month in pandas

我查看了某些 date_range 函数和 offset 函数,但无法真正找到一种快速方法来生成任何给定年份中任何/每个月的最后一个星期五日期。请问有简单的解决方案吗?我查看了堆栈溢出帖子好吧(使用 dateutil),但是那个看起来并不健壮/简单

你能帮忙吗

原文链接:https://stackoverflow.com//questions/71463620/generate-last-friday-of-each-month-in-pandas

回复

我来回复
  • jezrael的头像
    jezrael 评论

    采用:

    #generate all Fridays between start end datetimes
    r = pd.date_range('2020-01-01','2022-01-01', freq='W-FRI')
    #filter last Friday per month periods
    r = r.to_series().groupby(r.to_period('m')).last()
    

    print (r)
    2020-01   2020-01-31
    2020-02   2020-02-28
    2020-03   2020-03-27
    2020-04   2020-04-24
    2020-05   2020-05-29
    2020-06   2020-06-26
    2020-07   2020-07-31
    2020-08   2020-08-28
    2020-09   2020-09-25
    2020-10   2020-10-30
    2020-11   2020-11-27
    2020-12   2020-12-25
    2021-01   2021-01-29
    2021-02   2021-02-26
    2021-03   2021-03-26
    2021-04   2021-04-30
    2021-05   2021-05-28
    2021-06   2021-06-25
    2021-07   2021-07-30
    2021-08   2021-08-27
    2021-09   2021-09-24
    2021-10   2021-10-29
    2021-11   2021-11-26
    2021-12   2021-12-31
    Freq: M, dtype: datetime64[ns]
    

    或者如果没有星期五,则创建月份范围并减去星期:

    a = pd.date_range('2020-01-01','2022-01-01', freq='M')
    r = a.where(a.weekday == 4, a - pd.offsets.Week(weekday=4))
    print (r)
    DatetimeIndex(['2020-01-31', '2020-02-28', '2020-03-27', '2020-04-24',
                   '2020-05-29', '2020-06-26', '2020-07-31', '2020-08-28',
                   '2020-09-25', '2020-10-30', '2020-11-27', '2020-12-25',
                   '2021-01-29', '2021-02-26', '2021-03-26', '2021-04-30',
                   '2021-05-28', '2021-06-25', '2021-07-30', '2021-08-27',
                   '2021-09-24', '2021-10-29', '2021-11-26', '2021-12-31'],
                  dtype='datetime64[ns]', freq=None)
    
    2年前 0条评论