С df
в качестве входного кадра данных и индексирования в последовательности - 0,1,..
, вы можете сделать -
df.iloc[:(df.y.shift()<df.y).idxmax()[0]]
Для общего формата индекса вы можете сделать -
df.iloc[:(df.y.shift()<df.y).to_numpy().argmax()]
Пробный прогон -
In [106]: df
Out[106]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
11 8 0.969809
12 11 0.170910
In [107]: df.iloc[:(df.y.shift()<df.y).to_numpy().argmax()]
Out[107]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
Мы также можем использовать нарезку данных массива -
In [108]: a = df.y.to_numpy().ravel()
In [109]: df.iloc[:(a[:-1] < a[1:]).argmax()+1]
Out[109]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
В качестве альтернативы, с np.diff
для замены сдвинутого сравнения -
In [110]: df.iloc[:(np.diff(a)>0).argmax()+1]
Out[110]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349