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

如何使用pandas获取上一年对应日期的最近工作日(周末取前序工作日)

上一年对应有效工作日获取实现

需求规则

计算指定日期的上一年对应有效工作日,规则如下:

  • 先取上一年的自然同日
  • 若该自然同日为周末,返回距离该日期最近的前一个工作日(不向后取值)
  • 预期校验结果:
    • 输入2021-06-25(周五),返回2020-06-25(周四)
    • 输入2022-06-26(周日),返回2021-06-25(周五)

原有代码问题

原实现直接通过pd.DateOffset(years=1)计算上一年日期,没有做周末校准,拿到的是上一年自然日,无法匹配工作日规则要求。

修正代码

直接使用pandas内置的BDay(工作日偏移)的rollback方法即可实现往前找最近工作日的逻辑,完整可运行代码如下:

import pandas as pd
from pandas.tseries.offsets import BDay

# 构建测试数据集
df = pd.DataFrame({'Date':['20210625','20220626'],'Amount':[10,20]})
df['Date'] = pd.to_datetime(df['Date'], infer_datetime_format=True)

date_1 = df['Date'].iloc[-1]
# 第一步:取上一年自然同日
last_year_raw = date_1 - pd.DateOffset(years=1)
# 第二步:向前滚动到最近的工作日,周末自动回退到上一个周五
date_2 = BDay().rollback(last_year_raw)

df_2 = df[df['Date'] == date_2]

逻辑说明:BDay().rollback(传入日期)的判定规则为:如果传入日期本身是工作日,直接返回原日期;如果是周六/周日,自动返回之前最近的周五,完全匹配需求规则。

结果校验

运行代码后两个测试场景的计算结果完全符合预期:

  • 对2021-06-25,上一年自然同日为2020-06-25(周四,工作日),直接返回原值
  • 对2022-06-26,上一年自然同日为2021-06-26(周六),自动回退返回2021-06-25(周五)

内容的提问来源于stack exchange,提问作者hoa tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:34:13