微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据中后续年份的累积周数

如何解决数据中后续年份的累积周数

我想将星期几添加到Pandas DataFrame中。但这应该是累积的周数,在明年的1-52之后以53-104继续(而不是简单地从1-52重新开始)。 SO post正在处理类似的问题,但由于它提供的是排名而不是周数,因此没有给出理想的结果。

作为示例,我使用以下数据集。

import pandas as pd
df = pd.DataFrame({'Date':['2018-01-03','2018-01-10','2018-12-31','2019-01-06','2019-01-02','2019-03-15','2019-12-31','2020-01-02']})

然后我从数据中提取weekyear

df['Date'] = pd.to_datetime(df['Date'])
df['Week'] = df['Date'].dt.isocalendar().week
df['Year'] = df['Date'].dt.isocalendar().year

并找到以下可行的解决方案。

df['Weeknr'] = df['Week'] + df['Year'].map({2018:0,2019:52,2020:104})

但是我很好奇是否存在更好的选择。无需在代码中手动输入2018、2019和2020年(因为新数据可能会更改年份):

所以问题是,是否有任何函数或任何其他方式可以计算累计周数?

enter image description here

解决方法

我会做的:

df['weeknr'] = df['Week'] + (df['Year'] - df['Year'].min())*52

输出:

        Date  Week  Year  weeknr
0 2018-01-03     1  2018       1
1 2018-01-10     2  2018       2
2 2018-12-31     1  2019      53
3 2019-01-06     1  2019      53
4 2019-01-02     1  2019      53
5 2019-03-15    11  2019      63
6 2019-12-31     1  2020     105
7 2020-01-02     1  2020     105

更新:关于绝对周数而不是等腰历的想法:

min_year = pd.to_datetime(f"{df['Date'].dt.year.min()}-01")
df['weeknr'] = (df['Date'] - min_year) // pd.to_timedelta('7D') + 1

这将为样本数据提供与先前方法相同的weeknr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。