Поскольку вы пометили панд, вы можете сделать это с пандами 'cumsum
:
x = np.linspace(0, 10, 1000)
y = np.sin(x)
thresh = max(y) * 0.10
s = pd.Series(y>thresh)
# idx contains the jump from y<=thresh to y>thresh
# except possibly the first position
idx = s.index[s.ne(s.shift())]
# check the first position
if y[0] < thresh: idx = idx[1:]
# plot:
plt.figure(figsize=(10,6))
plt.plot(x,y)
plt.scatter(x[idx],y[idx], c='r', s=100)
plt.grid(True)
Сюжет:
Примечание : если, как вы сказали, серия x
является индексом времени y
, то приведенный выше код необходимо изменить на:
s = pd.Series(y>thresh)
# idx contains the jump from y<=thresh to y>thresh
# except possibly the first position
idx = s.index[s.ne(s.shift())]
# check the first position
if y.iloc < thresh: idx = idx[1:]
plt.figure(figsize=(10,6))
plt.plot(x,y)
# we only need to plot y[idx] against idx now
plt.scatter(idx,y[idx], c='r', s=100)
plt.grid(True)
, что дает: