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

Python按月份与第N个工作日分组DataFrame的方法求助

按「月份、第N个工作日」分组统计的实现方案

假设你的DataFrame索引为DatetimeIndex(若不是,先执行data.index = pd.to_datetime(data.index)转换),以下分两种场景实现:


场景1:按「月份 + 第N个周几」分组(如1月第2个周一、3月第1个周五)

这是对应你需求逻辑的核心实现:

  1. 生成辅助列,标记每行数据所属的月份、周几,以及该周几在当月是第几次出现
  2. 基于辅助列分组求和
import pandas as pd

# 1. 添加辅助列
data['month'] = data.index.month
# 0=周一,1=周二...6=周日
data['weekday'] = data.index.weekday
# 计算每个月内,当前周几是第几次出现(+1是为了从第1个开始计数)
data['nth_weekday'] = data.groupby(['month', 'weekday']).cumcount() + 1

# 2. 分组求和
# 方式1:按(月份, 周几, 第N个)的元组分组
sum_result = data.groupby(['month', 'weekday', 'nth_weekday']).sum()

# 方式2:生成更直观的分组名称(如"1月-第2个周一")后分组
data['group_label'] = data.apply(
    lambda row: f"{row['month']}月-第{row['nth_weekday']}个{['周一','周二','周三','周四','周五','周六','周日'][row['weekday']]}",
    axis=1
)
sum_result = data.groupby('group_label').sum()

场景2:按「月份 + 当月第N个工作日(仅工作日,排除周末)」分组

如果需求是统计每月第1、2、3...个工作日(仅周一至周五,不管周几):

import pandas as pd

# 1. 筛选工作日(周一至周五,weekday <5)
workday_data = data[data.index.weekday < 5].copy()

# 2. 计算每个月内的工作日序号
workday_data['nth_workday'] = workday_data.groupby(workday_data.index.month).cumcount() + 1

# 3. 分组求和
sum_result = workday_data.groupby([workday_data.index.month, 'nth_workday']).sum()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:36