如何在Pandas中找到财政周的日期

2024-05-19 05:06:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有很多日期的专栏:下面是上述列表的样本

    Dates 
 1  2019-02-01 
 2  2018-03-10 
 3  2019-08-01 
 4  2020-02-07

我想有它,以便如果输入一个日期,任何一年,我可以得到周数。 然而,财政年度从任何给定年度的8月1日开始。 我试着把日期改到1月1日,但由于闰年的原因,每年的日期都不一样

data['Dates'] = pd.to_datetime(data['Dates'])
data['Week'] = (data['Dates'] - timedelta(days=215)).week
print(data)

我怎样才能得到与下面这个类似的结果

    Dates        Week
 1  2019-02-01   27 
 2  2018-03-10   32
 3  2019-08-01   1
 4  2020-02-07   28

-注意:周数可能不正确


Tags: to列表datadatetime原因daystimedeltapd
2条回答

将其转换为datetime,然后调用datetime.date(2010,6,16).strftime(“%V”)4

您还可以使用isocalendar,它将返回一个元组,而不是datetime.date(2010,6,16).isocalendar()上面的字符串[1]

How to get week number in Python?

另一个答案忽略了OP的会计年度部分。我将会计年度开始日期计算留给读者,但这将从任意开始日期计算周数(其中周一是一周的开始)

from dateutil import relativedelta
from datetime import date, datetime, timedelta

NEXT_MONDAY = relativedelta.relativedelta(weekday=relativedelta.MO)
LAST_MONDAY = relativedelta.relativedelta(weekday=relativedelta.MO(-1))
ONE_WEEK = timedelta(weeks=1)

def week_in_fiscal_year(d: date, fiscal_year_start: date) -> int:
    fy_week_2_monday = fiscal_year_start + NEXT_MONDAY
    if d < fy_week_2_monday:
        return 1
    else:
        cur_week_monday = d + LAST_MONDAY
        return int((cur_week_monday - fy_week_2_monday) / ONE_WEEK) + 2

改编自此post

相关问题 更多 >

    热门问题