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

Pandas Groupby场景下计算重叠日期区间的起止时间

实现目标

基于你已完成的重叠簇标记结果,为每个同组重叠簇计算实际重叠区间的起止日期,新增字段直接展示在原DataFrame中。

注意:重叠区间指簇内所有日期范围的公共交集,不是簇内最早开始、最晚结束时间组成的总覆盖时间范围


实现步骤
  • 首先修正原代码的小问题:原df.drop('Range', axis=1)没有接收返回值,实际不会修改原DataFrame。
  • 重叠区间计算规则:
    • 同一重叠簇内的公共交集起点为簇内所有记录Start_Date的最大值
    • 公共交集终点为簇内所有记录End_Date的最小值
    • 非重叠簇、或计算后起点晚于终点(说明原簇标记存在误判、实际无交集)的记录,重叠起止字段设为空时间值NaT

完整代码

接你原有代码之后运行即可:

# 移除中间生成的Range列
df = df.drop('Range', axis=1)

def calc_overlap(group):
    # 非重叠簇直接返回空值
    if not group['Cluster'].iloc[0]:
        group['Overlap_Start'] = pd.NaT
        group['Overlap_End'] = pd.NaT
        return group
    # 计算交集起止
    overlap_start = group['Start_Date'].max()
    overlap_end = group['End_Date'].min()
    # 校验交集合法性
    if overlap_start > overlap_end:
        group['Overlap_Start'] = pd.NaT
        group['Overlap_End'] = pd.NaT
    else:
        group['Overlap_Start'] = overlap_start
        group['Overlap_End'] = overlap_end
    return group

# 按G2+Cluster分组计算,同一G2下的标记才属于同一个潜在重叠组
df = df.groupby(['G2', 'Cluster'], group_keys=False).apply(calc_overlap)

结果验证

以G2=A1分组的两条重叠记录为例:

  • 记录1:2020-06-01 ~ 2022-05-31
  • 记录2:2020-12-01 ~ 2021-11-30
  • 计算得到重叠区间:Overlap_Start=2020-12-01,Overlap_End=2021-11-30,和实际日期交集完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:30:47