encontrar valores mínimos locales condicionales en series de tiempo python

Para un conjunto de datos de series de tiempo:

A, ¿cómo encuentro los mínimos locales (valores nadir) para cada ID? (minutos locales)

B, ¿Cómo puedo encontrar valores posteriores que sean 2 mayores que cada mínimo local? (minutos locales + 2)

import pandas as pd
df = pd.DataFrame({'id': [1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2], 'value': [8,5,3,2,1,2,3,5, 1.5, 3, 1, 1.5, 2, 3, 4, 0.4]})

Para A, pude usar el siguiente código para encontrar todos los valores mínimos nadir / locales del conjunto de datos, pero no están agrupados por cada ID. ¿Cómo modifico esto para agruparlos por id?

nadir_min = df.value[(df.value.shift(1) > df.value) & (df.value.shift(-1) > df.value)]
nadir_min
Out[1]: 
4     1.0
8     1.5
10    1.0
Name: value, dtype: float64

Para B, me gustaría recuperar los valores posteriores después de los mínimos nadir / locales que son dos mayores que los mínimos nadir / locales. Para los datos de ejemplo anteriores, volvería:

index  id value 
 6      1   3.0
 13     2   3.0
 14     2   4.0 

Quizás un bucle condicional haría el truco ya que puede almacenar cada min local y comparar los valores posteriores si son 2 mayores que él. Sin embargo, el conjunto de datos de trabajo es MASIVO y tardaría demasiado en ejecutarse, así que estoy intentando algo como esto:

df['min_plus2'] = (df['value'] >= nadir_min + 2) & (df.index > nadir_min_index)

Respuestas a la pregunta(1)

Su respuesta a la pregunta