我有一个像这样的数据框:
data = {'year': [2020, 2020, 2021, 2021], 'week': [52, 53, 1, 2]}
df = pd.DataFrame(data=data)
year week
0 2020 52
1 2020 53
2 2021 1
3 2021 2
我想为每一行获取那个时期的星期一(日期),例如:
year week period
0 2020 52 2020-12-21
1 2020 53 2020-12-28
2 2021 1 2021-01-04
3 2021 2 2021-01-11
在熊猫中执行此操作的正确方法是什么?
答案 0 :(得分:1)
正确的做法是使用 ISO 日期格式模式:
df["period"] = pd.to_datetime(
df.year.astype(str) + '-W' + df.week.astype(str) + '-1',
format='%G-W%V-%u')\
.dt.strftime('%Y-%m-%d')
而不是
df["period"] = pd.to_datetime(
df.year.astype(str) + '-W' + df.week.astype(str) + '-1',
format='%Y-W%W-%w')\
.dt.strftime('%Y-%m-%d')
因为 ISO 周数(参见评论)
答案 1 :(得分:0)
你可以试试:
data = {'year': [2020, 2020, 2021, 2021], 'week': [52, 53, 1, 2]}
df = pd.DataFrame(data=data)
df['date combined']=df['year'].astype(str)+'-'+df['week'].astype(str)+ '-1'
df['date of Monday']=pd.to_datetime(df['date combined'], format='%Y-%W-%w')
print(df)
结果:
year week date combined date
0 2020 52 2020-52-1 2020-12-28
1 2020 53 2020-53-1 2021-01-04
2 2021 1 2021-1-1 2021-01-04
3 2021 2 2021-2-1 2021-01-11