You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas基于去年同周同工作日生成时间序列朴素预测?

高效实现同周同工作日的去年值预测

要高效实现「上一年同周同工作日」的朴素预测,核心是用向量化的匹配操作替代低效的apply,利用ISO周标识来精准匹配日期,避免闰年、工作日/周末差异带来的问题。具体实现步骤如下:

1. 确保日期列是datetime类型

先将Day列转换为Pandas datetime类型,这是后续日期操作的基础:

df['Day'] = pd.to_datetime(df['Day'])

2. 提取ISO标准的周标识

使用ISO标准的年、周、星期几来作为匹配键,避免普通周数在跨年/闰年场景下的混乱:

# 提取ISO日历信息:year=年份,week=当年周数,weekday=星期几(1=周一,7=周日)
iso_calendar = df['Day'].dt.isocalendar()
df['year'] = iso_calendar['year']
df['week'] = iso_calendar['week']
df['weekday'] = iso_calendar['weekday']

3. 用Merge实现高效向量化匹配

通过创建去年数据的副本并调整匹配年份,与原表合并实现批量匹配,这比逐行apply效率高得多:

# 复制去年数据,将年份+1作为匹配键(对应原表的当前年份)
last_year_data = df.copy()
last_year_data['match_year'] = last_year_data['year'] + 1

# 按「当前年份、周数、星期几」匹配去年的对应数据
df = df.merge(
    last_year_data[['match_year', 'week', 'weekday', 'Value']],
    left_on=['year', 'week', 'weekday'],
    right_on=['match_year', 'week', 'weekday'],
    how='left',
    suffixes=('', '_pred')
)

# 生成预测列并清理临时字段
df['Prediction'] = df['Value_pred']
df.drop(columns=['match_year', 'Value_pred'], inplace=True)

4. 可选:清理辅助字段

如果不需要保留year、week、weekday这些临时列,可最后删除:

df.drop(columns=['year', 'week', 'weekday'], inplace=True)

效果说明

  • 第一年的所有行因无对应上一年数据,Prediction自动为NaN,符合需求;
  • 后续年份的行将精准匹配上一年同ISO周、同星期几的Value值,自动区分工作日和周末;
  • Merge是Pandas的向量化操作,处理百万级行数据的效率远高于apply。

内容的提问来源于stack exchange,提问作者13sen1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:55:21