Pandas:折叠重叠间隔 [start-end] 并保持较小的

Pandas: collapse overlapping intervals [start-end] and keep the smaller

我有一个 Pandas 数据帧,其间隔由 2 个数字坐标定义,'start' 和 'end'。

我正在尝试折叠所有重叠的区间,并保留内部坐标。

index start end  
0 10 40  
1 13 34  
2 50 100  
3 44 94  

输出:具有折叠间隔和内部坐标的相同 Pandas 数据框。如果两个区间共享一个公共点(包括闭合端点),则它们会重叠。仅具有共同开放端点的区间不会重叠。

例如行索引 = [0,1] 的间隔重叠。我想将这 2 个间隔折叠成一个新间隔,它具有 new_start == max([10, 13]) 和 new_end == min([40,34])。行索引 [0,1] 的折叠间隔 new_start = 13,new_end = 34。

index start end  
0 13 34  
1 50 94

dataframe 的大小是 2M 行,因此我也在寻找一种有效的方法。

谢谢, 安德里亚

可以像下面那样做

df.groupby(((df.shift()["end"] - df["start"])<0).cumsum()).agg({"start":"min", "end":"max"})