python - 如何在 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
-注意:星期可能不正确。
解决方案
另一个答案忽略了 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
改编自这篇文章
推荐阅读
- json - 无法快速将 json 转换为 [String: Any]
- git - `git reset` 和 `git reset --soft` 有什么区别?
- node.js - 使用关联使用范围选择不同的行
- formatting - 如何在 SwiftUI 中将带逗号的十进制数转换为小数(Point)?
- java - Get leading alpha characters from a string in Java/Groovy
- prolog - Prolog检查事实中是否存在a或b
- python - ProcessPoolExecutor 方法为可调用
- sql-server - SSRS 不保存打印机属性
- python - 逐行有条件地修改熊猫数据框中的列的有效方法
- amazon-web-services - 使用参数文件运行TaskCat?