簡體   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