Pandas实现:从年份和周数字段获取对应周的周一日期
解决方案:根据年份和周数计算对应周一日期
要实现这个需求,我们可以利用Pandas的日期解析功能,通过将年份和周数组合成特定格式的字符串,再转换为对应的周一日期。以下是具体步骤和代码:
步骤1:准备原始数据
首先构建你提供的DataFrame:
import pandas as pd data = {'year': [2020, 2020, 2021, 2021], 'week': [52, 53, 1, 2]} df = pd.DataFrame(data=data)
步骤2:生成周一日期列
我们可以通过拼接年份、周数和代表周一的标识,再用pd.to_datetime解析为日期:
# 拼接成 "YYYY-WW-1" 格式的字符串,最后一位1代表周一 df['period'] = pd.to_datetime( df['year'].astype(str) + '-' + df['week'].astype(str).str.zfill(2) + '-1', format='%Y-%W-%w' )
代码解释:
str.zfill(2):确保周数是两位字符(比如第1周转为"01"),符合日期格式的解析要求;format='%Y-%W-%w':指定解析规则:%Y:4位数的年份;%W:周数(周一为一周的起始,范围00-53);%w:星期几(0=周日,1=周一,...,6=周六),这里我们用1明确指定取该周的周一。
验证结果
执行上述代码后,你的DataFrame会生成目标period列,结果如下:
| 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 |
这个方法完美兼容周数为53的特殊情况,也能准确解析跨年的周次。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

