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

如何自动将Datetime数据按近似均等时长划分成不重叠分组?

自动按时间区间分组DataFrame数据

需求说明

已有包含datetime类型date字段的DataFrame,数据时间跨度84个月,需划分为4组:

  • 每组约含21个月数据
  • 以数据最早日期(2015-10-02)为起点,各组区间无重叠(后一组起始为前一组结束日期+1天)
  • 最后一组截止到数据最晚日期(2022-09-30)
  • 替代手动编写np.select的低效方式,实现自动生成分组区间并完成分组

解决方案

方法1:自动生成区间后用np.select分组

通过计算每组的起始/结束日期,自动生成条件列表和分组标签,无需手动输入日期:

import pandas as pd
import numpy as np

# 确保date字段为datetime类型(若未预处理)
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d")

# 获取数据首尾日期
min_date = df["date"].min()
max_date = df["date"].max()

# 定义分组参数
months_per_group = 21
num_groups = 4

# 自动生成各组起始日期
group_starts = [min_date + pd.DateOffset(months=i * months_per_group) for i in range(num_groups)]

# 自动生成各组结束日期(前3组为下一组起始-1天,最后一组到数据最晚日期)
group_ends = []
for i in range(num_groups - 1):
    group_ends.append(group_starts[i+1] - pd.Timedelta(days=1))
group_ends.append(max_date)

# 生成分组条件与标签
condlist = [(df["date"] >= start) & (df["date"] <= end) for start, end in zip(group_starts, group_ends)]
choicelist = [chr(ord('A') + i) for i in range(num_groups)]

# 为数据添加分组列
df["Group"] = np.select(condlist, choicelist)

方法2:用pd.cut快速分组

利用pd.cut的区间划分特性,结合调整后的边界实现分组,代码更简洁:

import pandas as pd

# 确保date字段为datetime类型
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d")

min_date = df["date"].min()
max_date = df["date"].max()
months_per_group = 21
num_groups = 4

# 生成区间边界:最后一个边界设为最晚日期+1天,确保包含所有数据
group_starts = pd.date_range(start=min_date, periods=num_groups, freq=f"{months_per_group}MS")
bins = [min_date] + list(group_starts[1:]) + [max_date + pd.Timedelta(days=1)]
labels = ["A", "B", "C", "D"]

# 执行分组,include_lowest=True确保包含最早日期
df["Group"] = pd.cut(df["date"], bins=bins, labels=labels, include_lowest=True)

验证分组结果

可通过以下代码验证每组的时间范围和数据量:

# 查看每组的时间区间
group_ranges = df.groupby("Group")["date"].agg(["min", "max"])
print(group_ranges)

# 查看每组的数据量
group_counts = df["Group"].value_counts().sort_index()
print(group_counts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:45:33