Предполагая, что вы хотите определить окна, которые не перекрываются со значением минимума, если новое окно является пересечением двух старых окон, нам нужно решить эту проблему, выполнив две вещи.
Сначала нам нужно определить окна.я предполагаю, что если мы получим все начальные и конечные точки, мы сможем сделать это, поскольку окна не обязательно должны быть одинакового размера, просто не перекрывая друг друга.
my_list = np.sort(list(set(np.concatenate([df['Start'].values,df['End'].values]))))
затем мы строим новый фрейм данных из этого списка:
new_df = pd.DataFrame({'Start':my_list[:-1],'End':my_list[1:]})
, затем мы находим значение min:
new_df['value'] = new_df.apply(lambda x: min(df[(df['Start'] <= x[0]) & (df['End'] >= x[1])]['Value']), axis = 1)
ВЫХОД
Start End value
0 0 5 0.1
1 5 10 0.1
2 10 15 0.2
3 15 20 0.2
4 20 25 0.4
5 25 30 0.3
6 30 35 0.3
Если вам нужно более подробное объяснение того, что делает каждая строка / функция, пожалуйста, не стесняйтесь спрашиватьдля более подробной информации я обновлю ответ.