如何实现每月前6个工作日(周一至周五)的标记功能
标记每月前6个工作日实现方案
我们要实现的效果为:仅将每月周一至周五的前6个工作日标记为True,其余日期(含周末、当月第7个及以后的工作日)标记为False,该方案验证2021年11月场景时,11月1-5日为前5个工作日标记为True,6-7日为周末标记为False,11月8日为第6个工作日标记为True,后续日期全部为False,和你给出的示例完全匹配。
Excel 公式实现
假设你的日期数据存储在A列,从A2行开始写入日期,在B2单元格输入如下公式,下拉填充即可:=AND(WEEKDAY(A2,2)<=5,NETWORKDAYS(EOMONTH(A2,-1)+1,A2)<=6)
- 公式逻辑说明:
WEEKDAY(A2,2)<=5:判断当前日期是否为周一到周五的工作日,参数为2时周一返回1、周日返回7NETWORKDAYS(EOMONTH(A2,-1)+1,A2)<=6:计算从当月第一天到当前日期的工作日累计数量,判断是否小于等于6- 两个条件同时满足时返回
True,否则返回False
Python Pandas 实现
如果是用Python处理批量日期数据,可以用如下代码实现:
import pandas as pd # 1. 首先将日期列转为pandas日期类型,df为你的原始数据框,date为日期列名 df['date'] = pd.to_datetime(df['date']) # 2. 先判断日期是否为工作日(周一到周五对应weekday返回0-4,周六周日为5-6) df['is_workday'] = df['date'].dt.weekday <= 4 # 3. 按月份分组,对每个月的工作日做累计求和,前6个标记为True df['FlagDate'] = df.groupby(df['date'].dt.to_period('M'))['is_workday'].cumsum() <= 6 # 4. 所有非工作日统一设置为False df.loc[~df['is_workday'], 'FlagDate'] = False
运行后FlagDate列就是你需要的标记结果。
内容的提问来源于stack exchange,提问作者Kair0
相关产品推荐
相关产品推荐

