基于起始周与年份生成周数相关列的问题排查
修正Year和Week #列的计算逻辑
你的问题出在年份增量和周数的计算逻辑错误,原代码用Starting Week period + Week Count来计算年份增量,而非实际的累计周数(Starting Week period + Week Count -1),导致年份提前进位、周数重置异常。
修正后的代码
import numpy as np # 1. 计算从起始周开始的累计总周数(以起始年第1周为基准的绝对周数) df['Total Weeks'] = df['Starting Week period'] + df['Week Count'] - 1 # 2. 计算年份增量:每52周递增1年 df['Year'] = df['Starting Year'] + (df['Total Weeks'] // 52) # 3. 计算日历周数:总周数取模52,余数为0时对应当年第52周 df['Week #'] = df['Total Weeks'] % 52 df['Week #'] = df['Week #'].apply(lambda x: 52 if x == 0 else x) # 4. 格式化周数为两位字符串 df['Week #'] = df['Week #'].astype(str).str.zfill(2) # 5. 拼接Period列 df['Period'] = df['Year'].astype(str) + "-" + df['Week #'] # 可选:删除中间辅助列 # df.drop('Total Weeks', axis=1, inplace=True)
原代码问题分析
- 年份增量计算错误:
原代码用(Starting Week period + Week Count) / 52取整,把比实际累计周数多1的数值作为计算基数,导致跨年度时年份提前进位。比如实际累计周数为103(第2年最后一周),Starting Week period + Week Count为104,104/52=2,年份会错误加2,正确应该只加1。 - 周数重置逻辑不严谨:
原代码仅处理了首次超过52周的情况,未覆盖跨多个年度的场景,也未处理余数为0的情况(即当年第52周)。
逻辑验证示例(起始周51、起始年2023)
- Week Count=2 → 总周数=52 → Year=2023 → Week #=52
- Week Count=3 → 总周数=53 → Year=2024 → Week #=1
- Week Count=54 → 总周数=104 → Year=2025 → Week #=52
内容的提问来源于stack exchange,提问作者user21126867
相关产品推荐
相关产品推荐

