Ваш вопрос на самом деле сводится к подсчету, сколько полосок в каждом сегменте, я сделал это так:
def create_final(data):
data = [(x[0],x[1]) if x[0]<x[1] else (x[1],x[0]) for x in data]
ans = []
points = [(i[0], 'init') for i in data] + [(i[1], 'end') for i in data]
points = sorted(points)
carry = points[0]
nums = 1
for i in range(1, len(points)):
ans.append((carry[0], points[i][0], nums))
if points[i][1] == 'init':
nums+=1
elif points[i][1]=='end':
nums-=1
carry = points[i]
return ans
data = [tuple(x) for x in df[['KP_from', 'KP_to']].values]
create_final(data)
[(0.05, 0.12, 1),
(0.12, 0.5, 2),
(0.5, 0.55, 3),
(0.55, 0.7, 2),
(0.7, 0.75, 3),
(0.75, 0.8, 2),
(0.8, 0.84, 1)]
Я не знаю, какой именно формат вам нужен, но из этого списка кортежей (start, end, number of bars)
вы можете построить то, что хотите.