如何查找并合并Pandas DataFrame中重叠或包含的区间行?
合并Pandas DataFrame中重叠/包含的区间行
对于已按start列升序排列的DataFrame,合并所有存在重叠或包含关系的区间行,最简方法可通过分组聚合实现,具体如下:
实现代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'start': [100, 400, 450, 750, 920, 1000, 1100], 'end': [500, 700, 580, 910, 940, 1200, 1300] }) # 生成分组标识:当前行start大于上一行end时,标记为新组 group_id = (df['start'] > df['end'].shift(1)).cumsum() # 按分组聚合,取每组最小start和最大end merged_df = df.groupby(group_id).agg({'start': 'min', 'end': 'max'}).reset_index(drop=True) print(merged_df)
输出结果
start end 0 100 700 1 750 910 2 920 940 3 1000 1300
逻辑说明
- 分组标识生成:用
df['end'].shift(1)获取上一行的end值,与当前行start对比——若当前start更大,说明是独立新区间,生成True;否则属于同一合并组。cumsum()将布尔序列转为连续组ID,相同ID的行对应需要合并的区间。 - 聚合合并:按组ID分组后,对
start取最小值、end取最大值,直接得到合并后的最简区间。
内容的提问来源于stack exchange,提问作者Keyreall
相关产品推荐
相关产品推荐

