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

在Pandas中从日期生成周工作日相关列的实现求助

解决方案:基于日期生成周工作日相关字段

处理步骤与代码实现

首先确保Date列为datetime类型,再基于周分组计算目标字段:

import pandas as pd

# 转换Date列为datetime格式(适配日.月.年的输入格式)
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')

# 1. 生成length_week:统计该周的工作日总数
# 先筛选工作日,按ISO周分组计数,再映射回原表
weekly_work_count = df[df['workingday'] == 1].groupby(df['Date'].dt.isocalendar().week)['workingday'].count()
df['length_week'] = df['Date'].dt.isocalendar().week.map(weekly_work_count).fillna(0).astype(int)

# 2. 生成first_working_day_of_week:标记当周首个工作日
# 获取每个周的首个工作日日期
weekly_first_wday = df[df['workingday'] == 1].groupby(df['Date'].dt.isocalendar().week)['Date'].min()
df['first_working_day_of_week'] = df.apply(
    lambda row: 1 if (row['workingday'] == 1 and row['Date'] == weekly_first_wday.get(row['Date'].dt.isocalendar().week)) else 0,
    axis=1
)

# 3. 生成last_working_day_of_week:标记当周最后一个工作日
# 获取每个周的最后一个工作日日期
weekly_last_wday = df[df['workingday'] == 1].groupby(df['Date'].dt.isocalendar().week)['Date'].max()
df['last_working_day_of_week'] = df.apply(
    lambda row: 1 if (row['workingday'] == 1 and row['Date'] == weekly_last_wday.get(row['Date'].dt.isocalendar().week)) else 0,
    axis=1
)

关键说明

  • ISO周规则:上述代码使用dt.isocalendar().week,以周一为一周起始;若需以周日为起始,可替换为dt.strftime('%U')(%U表示周日起始的周数)。
  • 空值处理:若某周无工作日,length_week会填充为0,first/last_working_day_of_week保持0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:25:39