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

如何用Python设置月度工作周起始日期并处理时间序列数据

Python实现自定义工作周到日期的转换及工作日周频率获取

核心思路

要把「week N」格式的字段转成可识别的时间序列,核心是先定位每个月份的第一个工作日,再根据周数推算对应日期;工作日周频率可通过生成间隔7天的工作日序列来实现。

代码实现

1. 导入依赖库

import pandas as pd
from datetime import datetime
from pandas.tseries.offsets import CustomBusinessDay

2. 获取指定月份的第一个工作日

默认排除周末,如需处理节假日可自定义规则:

def get_first_workday(year, month, holidays=None):
    # 构造当月第一天
    first_day = datetime(year, month, 1)
    # 定义工作日规则:默认排除周末,传入holidays参数可额外排除指定节假日
    bd_rule = CustomBusinessDay(holidays=holidays) if holidays else CustomBusinessDay()
    # 计算第一个工作日
    first_workday = first_day + bd_rule(0)
    return first_workday

3. 转换「week N」字符串为对应日期

def convert_week_to_date(week_str, year, month, holidays=None):
    # 从"week N"中提取周数
    week_num = int(week_str.split()[1])
    # 获取当月第一个工作日
    first_workday = get_first_workday(year, month, holidays)
    # 计算目标日期:第一个工作日 + (周数-1)*7天
    target_date = first_workday + pd.Timedelta(days=(week_num - 1)*7)
    # 转为MM/DD/YYYY格式
    return target_date.strftime("%m/%d/%Y")

4. 批量处理数据库数据

假设你的数据存储在DataFrame中,包含week_col(「week N」字段)、year、month三列:

# 模拟数据库数据
df = pd.DataFrame({
    "week_col": ["week 1", "week 2", "week 3", "week 4"],
    "year": [2024]*4,
    "month": [6]*4
})

# 批量转换日期列
df["converted_date"] = df.apply(
    lambda row: convert_week_to_date(row["week_col"], row["year"], row["month"]),
    axis=1
)

print(df)
# 输出结果:
#   week_col  year  month converted_date
# 0   week 1  2024      6     06/03/2024
# 1   week 2  2024      6     06/10/2024
# 2   week 3  2024      6     06/17/2024
# 3   week 4  2024      6     06/24/2024

5. 生成工作日周频率序列

如果需要直接获取某月份所有工作周的起始日期:

def get_workweek_dates(year, month, week_count=4, holidays=None):
    first_workday = get_first_workday(year, month, holidays)
    # 生成间隔7天的工作日序列
    workweek_dates = pd.date_range(start=first_workday, periods=week_count, freq="7D")
    # 转为指定格式
    return [date.strftime("%m/%d/%Y") for date in workweek_dates]

# 示例:获取2024年6月的4个工作周日期
print(get_workweek_dates(2024, 6))
# 输出: ['06/03/2024', '06/10/2024', '06/17/2024', '06/24/2024']

扩展说明

  • 若需处理节假日,只需在调用函数时传入holidays参数(格式为[datetime(2024,6,14), ...]),函数会自动跳过这些日期;
  • 若数据库中没有单独的year和month列,可根据数据存储逻辑补充年月信息(比如批量数据对应固定年月,直接传入即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:26