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

如何用Python Pandas按自定义月度日期范围分组数据?

按自定义月度日期范围分组的解决方案

要实现从每月26日到次月25日的分组逻辑,无法直接通过pd.Grouper的默认频率实现,需要手动生成匹配自定义范围的分组键,具体步骤如下:

1. 确保日期列格式正确

先将DATE列转换为pandas的datetime类型,避免后续处理出错:

df['DATE'] = pd.to_datetime(df['DATE'])

2. 生成自定义分组键

定义函数为每个日期分配对应的分组起始日期(即每组的开始标识,如2024-01-26、2024-02-26等):

def get_group_start(date):
    if date.day >= 26:
        # 26号及以后的日期,归属当月26日起始的分组
        return date.replace(day=26)
    else:
        # 25号及以前的日期,归属上月26日起始的分组
        return (date - pd.DateOffset(months=1)).replace(day=26)

# 生成分组列
df['group_start'] = df['DATE'].apply(get_group_start)

3. 按分组键聚合数据

直接通过生成的group_start列分组求和,结果索引即为每组的起始日期,对应范围是该日期到次月25日:

grouped_result = df.groupby('group_start')[['POB']].sum()

动态生成自定义日期范围列表

如果需要批量生成2024-X1-26到2024-X2-25格式的日期范围,可使用以下代码:

# 起始基准日期
start_base = pd.to_datetime('2024-01-26')
# 要生成的范围数量
num_ranges = 6

date_range_list = []
for i in range(num_ranges):
    start_date = start_base + pd.DateOffset(months=i)
    # 结束日期为下一个月26号减1天,即次月25号
    end_date = start_base + pd.DateOffset(months=i+1) - pd.DateOffset(days=1)
    date_range_list.append(
        (start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))
    )

# 输出格式化后的日期范围
for start, end in date_range_list:
    print(f"start_date = '{start}'")
    print(f"end_date = '{end}'")

运行后会输出:

start_date = '2024-01-26'
end_date = '2024-02-25'
start_date = '2024-02-26'
end_date = '2024-03-25'
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:16:01