[英]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.