Python 如何在年份发生变化时使用熊猫延续周数

Python 如何在年份发生变化时使用熊猫延续周数,python,python-3.x,pandas,Python,Python 3.x,Pandas,示例:通过使用 df['Week_Number'] = df['Date'].dt.strftime('%U') for 29/12/2019 the week is 52. and this week is from 29/12/2019 to 04/01/2020. but for 01/01/2020 the week is getting as 00. 我需要2020年1月1日的一周时间,也可以是52。2020年1月5日至2020年1月11日为53。这需要继续。如中所述,您可以使用

示例:通过使用

df['Week_Number'] = df['Date'].dt.strftime('%U') 
for 29/12/2019 the week is 52. and this week is from 29/12/2019 to 04/01/2020.

but for 01/01/2020 the week is getting as 00.
我需要2020年1月1日的一周时间,也可以是52。2020年1月5日至2020年1月11日为53。这需要继续。

如中所述,您可以使用
df['Date'].dt.week
获取周数

为了让它继续下去,你也许可以用新的周值来总结上周的数字,像这样?我现在不能测试这个

if(df['Date'].dt.strftime('%U') == 53):
  last = df['Date'].dt.strftime('%U')

df['Week_Number'] = last + df['Date'].dt.strftime('%U')

您可以使用
isoweek
isoyear
执行此操作。 我看不出您是如何得出用
'%U'
表示的值的,因此我假设您希望将从周日开始的一周映射到
2019-12-29
2020-01-04
53
,并且希望将下一周映射到
54
,以此类推。 在过去的几周内,您需要
isoweek

isocalendar()
在第二个元素中提供一个元组,其中isoweek位于第二个元素中,对应的唯一isoyear位于第一个元素中。 但是等周从周一开始,所以我们必须加上一天,所以周日被解释为周一,并计入正确的一周。 减去2019年,从0开始计算年份,然后每年乘以53,再加上isoweek。最后,偏移量为1,因此到达53

In [0]: s=pd.Series(["29/12/2019", "01/01/2020", "05/01/2020", "11/01/2020"])                                    
        dts = pd.to_datetime(s,infer_datetime_format=True)                                                        
In [0]: (dts + pd.DateOffset(days=1)).apply(lambda x: (x.isocalendar()[0] -2019)*53 + x.isocalendar()[1] -1)                              
Out[0]: 
0    53
1    53
2    54
3    54
dtype: int64

当然,这是假设所有的iso年都有53周,但事实并非如此,因此您需要计算2019年以来每个iso年的iso周数,并将其相加。

也许您正在寻找这一点。我确定了一个时代。如果日期早于2019年,则可以选择其他纪元

epoch= pd.Timestamp("2019-12-23")  

# Test data:
df=pd.DataFrame({"Date":pd.date_range("22/12/2019",freq="1D",periods=25)})   
df["Day_name"]=df.Date.dt.day_name()

# Calculation:
df["Week_Number"]=np.where(df.Date.astype("datetime64").le(epoch), \
                               df.Date.dt.week, \
                               df.Date.sub(epoch).dt.days//7+52)
    df                                                                                                                  

        Date   Day_name  Week_Number
0  2019-12-22     Sunday           51
1  2019-12-23     Monday           52
2  2019-12-24    Tuesday           52
3  2019-12-25  Wednesday           52
4  2019-12-26   Thursday           52
5  2019-12-27     Friday           52
6  2019-12-28   Saturday           52
7  2019-12-29     Sunday           52
8  2019-12-30     Monday           53
9  2019-12-31    Tuesday           53
10 2020-01-01  Wednesday           53
11 2020-01-02   Thursday           53
12 2020-01-03     Friday           53
13 2020-01-04   Saturday           53
14 2020-01-05     Sunday           53
15 2020-01-06     Monday           54
16 2020-01-07    Tuesday           54
17 2020-01-08  Wednesday           54
18 2020-01-09   Thursday           54
19 2020-01-10     Friday           54
20 2020-01-11   Saturday           54
21 2020-01-12     Sunday           54
22 2020-01-13     Monday           55
23 2020-01-14    Tuesday           55
24 2020-01-15  Wednesday           55

这只给出了特定年份的周数,但即使年份发生变化,我也需要延续周数。您能给出一个示例系列吗?
pd.to_datetime(pd.Series(['2019-12-29'])).dt.strftime('%U')
为我返回
52
,而不是
53
。如果你能提供代码来重现你的例子,那将非常有帮助。不管怎样,你的假设是错误的。2019年12月29日为第52周,2020年1月1日为第1周。2019年没有第54周和第53周。。。你想做什么?你得到2019年第53周的解决方案了吗?@Jean BaptisteYunès 2019年第53周,这取决于你使用的是哪种“惯例”。。29,30,31是第53周,第1周从1月1日开始