проблема, которую я обнаружил, заключается в том, что идентификаторы не группируются с помощью функции, подобной groupby, поэтому в итоге получается, что строка 7 сравнивается с 1, а не с наноподобными, как строки 1, 2 и 3, что является ложным срабатыванием.

абора данных временного ряда:

A, Как мне найти локальные минимумы (значения надира) для каждого идентификатора? (местные минуты)

B, Как мне найти любые последующие значения, которые на 2 больше, чем каждый локальный минимум. (местные минуты + 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]})

Для A я смог использовать следующий код, чтобы найти все минимальные значения nadir / local из набора данных, но они не сгруппированы по каждому идентификатору. Как мне изменить это, чтобы сгруппировать их по идентификатору?

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

Для B я хотел бы получить последующие значения после надир / локальных минимумов, которые на два больше, чем надир / локальные минимумы. Для приведенных выше примеров я вернусь:

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

Возможно, условный цикл справится с задачей, поскольку он может хранить каждую локальную мин и сравнивать последующие значения, если они на 2 больше, чем он. Тем не менее, рабочий набор данных является массивным и займет слишком много времени, поэтому я пытаюсь что-то вроде этого:

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