在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
相关产品推荐
相关产品推荐

