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

在Python中合并DataFrame的重叠与包含区间行

合并DataFrame中重叠/包含的区间

我有一个简单的DataFrame:

start  end
0      30   40
1      45   55
2      50   60
3      53   64
4      65   70
5      75   80
6      77   85
7      80   83
8      90  120
9      95  100
10    105  110

可以看到部分行存在重叠或被其他行包含的情况,需要整理该DataFrame,得到如下结果:

start  end
0     30   40
1     45   64
2     65   70
3     75   85
4     90  120

区间重叠示意图


解决方案

通过以下步骤实现区间合并:

  1. 按start列对DataFrame排序,确保区间按起始顺序处理
  2. 标记分组:当当前行的start大于前一行的end时,视为新的区间组
  3. 按分组对start取最小值、end取最大值,得到合并后的结果

具体代码如下:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'start': [30,45,50,53,65,75,77,80,90,95,105],
    'end': [40,55,60,64,70,80,85,83,120,100,110]
})

# 按起始值排序
df_sorted = df.sort_values('start').reset_index(drop=True)

# 生成分组标识
group_ids = (df_sorted['start'] > df_sorted['end'].shift()).cumsum()

# 分组聚合合并区间
merged_df = df_sorted.groupby(group_ids).agg(
    start=('start', 'min'),
    end=('end', 'max')
).reset_index(drop=True)

print(merged_df)

运行后输出结果与需求完全一致:

start  end
0     30   40
1     45   64
2     65   70
3     75   85
4     90  120

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:30:54