繁体   English   中英

如何获得每个季度上周五的日期?

[英]How to get date of last friday in each quarter?

我想找到给定年份每个季度的最后一个星期五日期。 例如output如下

last friday in March
last friday in June
last friday in september
last friday in december

我怎样才能根据给定的年份智能地找到这个作为输入

我假设您不希望 output 字面意思

last friday in March
last friday in June
last friday in september
last friday in december

而且您只是不想查找示例年份的这些日期以包含在您的问题中。

由于我们知道季度总是在这些月份结束,因此我们可以创建这些月份的最后日期。 然后, datetime.date.weekday()告诉我们它是星期几。 星期五是4 ,所以我们只需要找出我们需要多少天 go 才能实现这一点。 那么,使用datetime.timedelta可以减去那么多天,我们应该对 go 好:

import datetime
def last_fridays_of_quarter(year):
    last_days = [datetime.date(year, 3, 31), datetime.date(year, 6, 30), datetime.date(year, 9, 30), datetime.date(year, 12, 31)]

    for day in last_days:
        days_to_sub = (day.weekday() - 4) % 7
        last_friday = day - datetime.timedelta(days=days_to_sub)
        print(last_friday)

在 2022 年进行测试:

>>> last_fridays_of_quarter(2022)
2022-03-25
2022-06-24
2022-09-30
2022-12-30

这是解决它的一种方法。 您将给定年份中每个季度的最后几天存储在一个数组中。 然后您遍历所述季度结束日期,并计算您需要减去才能到达上一个星期五的偏移量。

from datetime import datetime, timedelta

year = 2022
quarter_ending_dates = [
    datetime(year, 3, 31),
    datetime(year, 6, 30),
    datetime(year, 9, 30),
    datetime(year, 12, 31)
]
for ending_date in quarter_ending_dates:
    offset = (ending_date.weekday() - 4) % 7 
    last_friday = ending_date - timedelta(days=offset)
    print(last_friday)

尝试:

import pandas as pd

def fridays(year):
    df = pd.date_range(start=str(year), end=str(year+1), 
                         freq='W-FRI').strftime('%m/%d/%Y')\
                         .to_frame().reset_index(drop = True)
    
    df.columns = ['date']
    df.index = pd.to_datetime(df['date']).dt.to_period('Q')
    df = df.groupby(df.index).last()
    df.index.name = 'quarter'
    
    return df
fridays(2022)

output 是:

四分之一 日期
2022Q1 2022 年 3 月 25 日
2022Q2 2022 年 6 月 24 日
2022Q3 2022 年 9 月 30 日
2022Q4 2022 年 12 月 30 日

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM