【问题标题】:How can I find the fiscal Week of date in Pandas如何在 Pandas 中找到日期的财政周
【发布时间】:2020-04-16 14:25:05
【问题描述】:

我有一个包含许多日期的列:下面所述列表的示例

    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

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    将其转换为日期时间,然后调用 datetime.date(2010, 6, 16).strftime("%V")4

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

    How to get week number in Python?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 1970-01-01
        • 2023-01-10
        相关资源
        最近更新 更多