在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

解决方案
通过以下步骤实现区间合并:
- 按
start列对DataFrame排序,确保区间按起始顺序处理 - 标记分组:当当前行的
start大于前一行的end时,视为新的区间组 - 按分组对
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
相关产品推荐
相关产品推荐

