转换以下升序数据帧的最简单方法是什么:
start end
0 100 500
1 400 700
2 450 580
3 750 910
4 920 940
5 1000 1200
6 1100 1300
进入
start end
0 100 700
1 750 910
2 920 940
3 1000 1300
您可能会注意到,第0:3行和第5:7行被合并,因为这些行重叠,或者一行是另一行的子部分:实际上,它们只有一个开始和结束。
使用带有shift
的自定义组来识别重叠的间隔,并保留第一个开始和最后一个结束(如果您愿意,也可以是min/max(:
group = df['start'].gt(df['end'].shift()).cumsum()
out = df.groupby(group).agg({'start': 'first', 'end': 'last'})
输出:
start end
0 100 580
1 750 910
2 920 940
3 1000 1300
中间体group
:
0 0
1 0
2 0
3 1
4 2
5 3
6 3
dtype: int64