df.col1.diff().lt(0).cumsum()
определяет группы возрастающих значений set_index
с этими группами и col1
, но сохраняет col1
в собственном кадре данных с drop=False
groupby
и pd.concat
для использования reindex
с method='nearest'
Я оставил старый индекс col1
, чтобы вы могли видеть, что сопоставлено с чем.
c = df.set_index([df.col1.diff().lt(0).cumsum().rename('grp'), 'col1'], drop=False)
pd.concat([c.xs(k).reindex([1, 5, 10], method='nearest') for k, c in c.groupby(level=0)])
col1 col2
col1
1 1 10
5 5 23
10 11 32
1 2 23
5 6 15
10 10 32
Если вам не нравится этот дополнительный col1
в индексе, вы можете переименовать индекс и затем удалить его:
c = df.set_index([df.col1.diff().lt(0).cumsum().rename('grp'), 'col1'], drop=False)
pd.concat([c.xs(k).reindex([1, 5, 10], method='nearest') for k, c in c.groupby(level=0)]) \
.rename_axis(None).reset_index(drop=True)
col1 col2
0 1 10
1 5 23
2 11 32
3 2 23
4 6 15
5 10 32