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

pandas如何按自定义区间(每月25日至次月24日)对日期分组

Pandas 自定义日期区间分组实现方案

前提:默认使用Pandas处理数据,需要先保证你的日期列已转换为datetime64类型。

实现逻辑

核心是给每行数据生成对应分组的起始标识,后续直接按该标识分组聚合即可,分为两部分规则匹配:

  • 首组范围固定为2021-07-14 ~ 2021-07-24,统一使用2021-07-14作为分组标识
  • 常规周期为当月25日~次月24日,统一使用周期起始的25日作为分组标识

代码实现(通用小数据量版)

import pandas as pd

# 1. 转换日期列格式
df['date'] = pd.to_datetime(df['date'])

# 2. 定义首组固定边界
FIRST_GROUP_START = pd.to_datetime('2021-07-14')
FIRST_GROUP_END = pd.to_datetime('2021-07-24')

# 3. 定义分组标识生成函数
def get_group_key(date):
    # 匹配首组规则
    if FIRST_GROUP_START <= date <= FIRST_GROUP_END:
        return FIRST_GROUP_START
    # 匹配常规周期规则
    if date.day >= 25:
        # 当月25及之后,归为当月25开始的分组
        return pd.Timestamp(date.year, date.month, 25)
    else:
        # 当月24及之前,归为上月25开始的分组
        prev_month = date.month - 1
        prev_year = date.year
        if prev_month == 0:
            prev_month = 12
            prev_year -= 1
        return pd.Timestamp(prev_year, prev_month, 25)

# 4. 生成分组标识列
df['group_key'] = df['date'].apply(get_group_key)

# 5. 按分组标识聚合即可,示例为统计每组行数
group_result = df.groupby('group_key').size()

大数据量优化版(向量化操作,避免循环)

如果数据量超过10万行,apply方法性能较差,可使用numpy向量化逻辑替代:

import pandas as pd
import numpy as np

df['date'] = pd.to_datetime(df['date'])
FIRST_GROUP_START = pd.to_datetime('2021-07-14')
FIRST_GROUP_END = pd.to_datetime('2021-07-24')

# 标记首组行
is_first = (df['date'] >= FIRST_GROUP_START) & (df['date'] <= FIRST_GROUP_END)
# 计算常规分组的月份偏移:日>=25偏移0个月,否则偏移-1个月
month_offset = np.where(df['date'].dt.day >= 25, 0, -1)
# 批量生成分组标识
df['group_key'] = np.where(
    is_first,
    FIRST_GROUP_START,
    (df['date'] + pd.offsets.MonthOffset(month_offset)).dt.floor('D').replace(day=25)
)

# 聚合操作和上述一致
group_result = df.groupby('group_key').size()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:24:04