如何用np.where处理周数跨年:周52时年份+1、周数重置为1
正确计算下一周的年份与周数(含跨年场景)
你的现有代码可正常处理非跨年的周数计算,但无法应对WEEK=52的跨年场景,以下是两种可行的修正方案:
方案一:使用np.where批量处理
通过分条件计算目标年份和周数,再拼接成结果字段,适合大数据量场景,执行效率高:
import numpy as np # 计算目标年份:周数为52时年份+1,否则保持原年份 target_year = np.where(df_calls_subweek_target['WEEK'] == 52, df_calls_subweek_target['YEAR'] + 1, df_calls_subweek_target['YEAR']) # 计算目标周数:周数为52时重置为1,否则周数+1 target_week = np.where(df_calls_subweek_target['WEEK'] == 52, 1, df_calls_subweek_target['WEEK'] + 1) # 拼接成年份-周数字符串 df_calls_subweek_target['YEAR_WEEK_targ'] = target_year.astype(str) + "_" + target_week.astype(str)
测试示例:
| YEAR_WEEK | YEAR_WEEK_targ |
|---|---|
| 2008_52 | 2009_1 |
| 2008_39 | 2008_40 |
方案二:使用apply逐行处理
逻辑更直观易懂,适合数据量较小的场景:
def generate_next_week(row): if row['WEEK'] == 52: return f"{row['YEAR'] + 1}_1" else: return f"{row['YEAR']}_{row['WEEK'] + 1}" df_calls_subweek_target['YEAR_WEEK_targ'] = df_calls_subweek_target.apply(generate_next_week, axis=1)
内容的提问来源于stack exchange,提问作者Kathryn Moore
相关产品推荐
相关产品推荐

