首页 > 解决方案 > 考虑到去年的第一天,今年的第一周

问题描述

我有以下df:

time_series                  date   sales
store_0090_item_85261507     1/2020   1,0
store_0090_item_85261501     2/2020   0,0
store_0090_item_85261500     3/2020   6,0

成为“日期”=周/年。所以,我尝试使用以下代码:

df['date'] = df['date'].apply(lambda x: datetime.strptime(x + '/0', "%U/%Y/%w"))

但是,返回这个 df:

time_series                  date        sales
store_0090_item_85261507     2020-01-05   1,0
store_0090_item_85261501     2020-01-12   0,0
store_0090_item_85261500     2020-01-19   6,0

但是,2020 年第一周的第一天是 2019-12-29,以星期日为第一天。我怎么能有 2020 年第一周的第一天 2020-12-29 而不是 2020-01-05?

标签: pythonpandasdatetime

解决方案


您需要使用ISO 周 解析指令,例如:

import pandas as pd

date = pd.Series(["1/2020", "2/2020", "3/2020"])

pd.to_datetime(date+"/1", format="%V/%G/%u")

0   2019-12-30
1   2020-01-06
2   2020-01-13
dtype: datetime64[ns]

如果一周应该从星期日开始,您也可以移动一天:

pd.to_datetime(date+"/1", format="%V/%G/%u") - pd.Timedelta('1d')
 
0   2019-12-29
1   2020-01-05
2   2020-01-12
dtype: datetime64[ns]

推荐阅读