Python 数据中随后年份的累计周数

Python 数据中随后年份的累计周数,python,pandas,week-number,Python,Pandas,Week Number,我想将周数添加到熊猫数据框中。但这应该是一个累积的周数,在明年1-52之后以53-104继续计算(而不是简单地从1-52重新开始)。这是在处理一个类似的问题,但没有给出期望的结果,因为它提供了一个排名而不是周数 作为示例,我使用以下数据集 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',

我想将周数添加到熊猫数据框中。但这应该是一个累积的周数,在明年1-52之后以53-104继续计算(而不是简单地从1-52重新开始)。这是在处理一个类似的问题,但没有给出期望的结果,因为它提供了一个排名而不是周数

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

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']})
然后我从数据中提取了
week
year

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年(因为新数据可能会改变年份):

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

我会:

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

更新:关于绝对周数的想法,而不是isocalendar的:

min_year = pd.to_datetime(f"{df['Date'].dt.year.min()}-01")
df['weeknr'] = (df['Date'] - min_year) // pd.to_timedelta('7D') + 1
这将与前一种样本数据方法相同。

我会:

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

更新:关于绝对周数的想法,而不是isocalendar的:

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

这将与样本数据的前一种方法相同。

53周年你会怎么做?从技术上讲,所有的年都是53周。我只会将周评估为
天//7
。但这不是OP的要求:P.这是一个聪明的回答,我赞成,但即使它不明确,它应该考虑53周的时间,有一个每5-6年,它确实说,在数据中的年可能会改变…因此,我想概括一下solution@Quang黄:你的意思是闰年的天偏移量是366天,否则是365天?是的,因为它只计算日差,然后除以7。53周年你会怎么做?从技术上讲,所有的年份都是53周。我只会将周评估为
天//7
。但这不是OP的要求:P.这是一个聪明的回答,我赞成,但即使它不明确,它应该考虑53周的时间,有一个每5-6年,它确实说,在数据中的年可能会改变…因此,我想概括一下solution@QuangHoang:你是说闰年是366天,其他是365天?是的,因为它只计算日差,然后除以7。你为什么需要这个计算?我以前没有看到过这样的请求,您的用例可以通过索引
年、周
来解决吗?首先,因为我希望有一个持续到第52周之后的绘图x轴。事实上,今年的周指数可能也会起作用,但我很好奇是否有办法显示累计周数。为什么需要这种计算?我以前没有看到过这样的请求,您的用例可以通过索引
年、周
来解决吗?首先,因为我希望有一个持续到第52周之后的绘图x轴。事实上,今年的周指数也可能有效,但我很好奇是否有办法显示累计周数。