localizando valores mínimos locais condicionais em python de séries temporais

Para um conjunto de dados de séries temporais:

A, Como encontro os mínimos locais (valores nadir) para cada ID? (minutos locais)

B, Como encontro os valores subsequentes 2 maiores que cada mínimo local. (minutos locais + 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 o código a seguir para encontrar todos os valores mínimos locais / nadir do conjunto de dados, mas eles não são agrupados por cada ID. Como modifico isso para agrupá-los 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, gostaria de recuperar os valores subseqüentes após os mínimos locais / nadir que são dois maiores que os mínimos locais / nadir. Para os dados de exemplo acima, eu retornaria:

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

Talvez um loop condicional faça o truque, pois pode armazenar cada mínimo local e comparar os valores subseqüentes se forem 2 maiores que ele. No entanto, o conjunto de dados de trabalho é MASSIVO e levaria muito tempo para ser executado; portanto, estou tentando algo como isto:

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

questionAnswers(1)

yourAnswerToTheQuestion