如何根据 Pandas 中的年份和周数定义 5-4-4 周的期间列
我的公司使用 5-4-4 日历进行报告。每个月(又称周期)长 4 周,但每个第一个月长 5 周。
我正在使用下面的代码从周和年创建期间列
dff['Period'] = pd.to_datetime(dff["Week ID"].astype("str") + "-0", format="%Y%U-%w").dt.month
dff['Period'] ='Period ' + dff['Period'].astype(str).str.zfill(2)
,但是我的公司对期间使用 5-4-4 格式,即
- 前 5 周 [Wk01 到 Wk05] 应被视为期间 1,
- 接下来的 4 周 [Wk06 到 Wk09] 应被视为期间 1被视为周期 2
- 被视为周期 3
接下来 4 周 [第 10 周到第 13 周] 应该再次
- 接下来 5 周 [第 14 周到第 18 周] 应该被视为周期 接下来的 4周
- [第 19 周到第 22 周] 应被视为第 5 期
- 接下来的 4 周 [第 23 周到第 26 周] 应被视为第 6 期
,每年依此类推......
当前产出
Year Period Week Week ID Site
2020 Period 01 Wk01 202001 ABC
2020 Period 01 Wk02 202002 ABC
2020 Period 01 Wk03 202003 ABC
2020 Period 01 Wk04 202004 ABC
2020 Period 02 Wk05 202005 ABC
2020 Period 02 Wk06 202006 ABC
2020 Period 02 Wk07 202007 ABC
2020 Period 02 Wk08 202008 ABC
2020 Period 03 Wk09 202009 ABC
2020 Period 03 Wk10 202010 ABC
2020 Period 03 Wk11 202011 ABC
2020 Period 03 Wk12 202012 ABC
2020 Period 03 Wk13 202013 ABC
2020 Period 04 Wk14 202014 ABC
2020 Period 04 Wk15 202015 ABC
预期产出
Year Period Week Week ID Site
2020 Period 01 Wk01 202001 ABC
2020 Period 01 Wk02 202002 ABC
2020 Period 01 Wk03 202003 ABC
2020 Period 01 Wk04 202004 ABC
2020 Period 01 Wk05 202005 ABC
2020 Period 02 Wk06 202006 ABC
2020 Period 02 Wk07 202007 ABC
2020 Period 02 Wk08 202008 ABC
2020 Period 02 Wk09 202009 ABC
2020 Period 03 Wk10 202010 ABC
2020 Period 03 Wk11 202011 ABC
2020 Period 03 Wk12 202012 ABC
2020 Period 03 Wk13 202013 ABC
2020 Period 04 Wk14 202014 ABC
2020 Period 04 Wk15 202015 ABC
My company uses a 5-4-4 calendar for reporting purposes. Each month (aka period) is 4-weeks long, except every first month is 5-weeks long.
Pandas seems to have good support for custom calendar periods and found this documentation too.
I'm creating Period column from Week and Year using below code
dff['Period'] = pd.to_datetime(dff["Week ID"].astype("str") + "-0", format="%Y%U-%w").dt.month
dff['Period'] ='Period ' + dff['Period'].astype(str).str.zfill(2)
However my company is using 5-4-4 format for period i.e.
- First 5 weeks [Wk01 to Wk05] should be considered as Period 1
- next 4 weeks [Wk06 to Wk09] should be considered as Period 2
- next 4 weeks [Wk10 to Wk13] should be considered as Period 3
again
- next 5 weeks [Wk14 to Wk18] should be considered as Period 4
- next 4 weeks [Wk19 to Wk22] should be considered as Period 5
- next 4 weeks [Wk23 to Wk26] should be considered as Period 6
and so on for every year.......
Current output
Year Period Week Week ID Site
2020 Period 01 Wk01 202001 ABC
2020 Period 01 Wk02 202002 ABC
2020 Period 01 Wk03 202003 ABC
2020 Period 01 Wk04 202004 ABC
2020 Period 02 Wk05 202005 ABC
2020 Period 02 Wk06 202006 ABC
2020 Period 02 Wk07 202007 ABC
2020 Period 02 Wk08 202008 ABC
2020 Period 03 Wk09 202009 ABC
2020 Period 03 Wk10 202010 ABC
2020 Period 03 Wk11 202011 ABC
2020 Period 03 Wk12 202012 ABC
2020 Period 03 Wk13 202013 ABC
2020 Period 04 Wk14 202014 ABC
2020 Period 04 Wk15 202015 ABC
Expected output
Year Period Week Week ID Site
2020 Period 01 Wk01 202001 ABC
2020 Period 01 Wk02 202002 ABC
2020 Period 01 Wk03 202003 ABC
2020 Period 01 Wk04 202004 ABC
2020 Period 01 Wk05 202005 ABC
2020 Period 02 Wk06 202006 ABC
2020 Period 02 Wk07 202007 ABC
2020 Period 02 Wk08 202008 ABC
2020 Period 02 Wk09 202009 ABC
2020 Period 03 Wk10 202010 ABC
2020 Period 03 Wk11 202011 ABC
2020 Period 03 Wk12 202012 ABC
2020 Period 03 Wk13 202013 ABC
2020 Period 04 Wk14 202014 ABC
2020 Period 04 Wk15 202015 ABC
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用一些数学来计算映射器:
输出:
You can use some math to compute a mapper:
output: