首页 > 解决方案 > 如何在 Pandas 中找到日期的财政周

问题描述

我有一列有很多日期:下面所述列表的示例

    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

-注意:星期可能不正确。

标签: pythonpandas

解决方案


另一个答案忽略了 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

改编自这篇文章


推荐阅读