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"})
我有一个 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"})