Как сделать resample в timeseries на основании изменении значения?

У меня есть timeseries Вот пример:

                                    p
time    
2017-01-03 09:30:00.083000-05:00    74.6100
2017-01-03 09:30:00.505000-05:00    74.9900
2017-01-03 09:30:05.469000-05:00    74.7919
2017-01-03 09:30:08.555000-05:00    74.5000
2017-01-03 09:30:10.927000-05:00    74.9000

Значения в столбце 'p' иногда не меняются при изменении 'time'. Я хочу сделать следующее: Алгоритм должен идти по DataFrame и:

  • Если цена ('p') на следующем шаге такая же, как и на предыдущем - мы оставляем в DataFrame только первое значение.
  • Если цена на следующем шаге изменилась по сравнению с предыдущим - мы записываем его в DataFrame

Получается, что мы делаем resample на основании изменения цены, но шаг изменения не имеет значения.

Помогите понять, как это сделать? Спасибо


Ответы (2 шт):

Автор решения: MaxU

Воспользуйтесь DataFrame.drop_duplicates():

df = df.drop_duplicates(subset=["p"], keep="first")
→ Ссылка
Автор решения: strawdog

Исходный df:

                                       time      P
2017-01-03 2020-02-11 09:30:00.083000-05:00  74.61
2017-01-03 2020-02-11 09:30:00.505000-05:00  74.99
2017-01-03 2020-02-11 09:30:05.469000-05:00  74.99
2017-01-03 2020-02-11 09:30:08.555000-05:00  74.50
2017-01-03 2020-02-11 09:30:10.927000-05:00  74.50
2017-01-03 2020-02-11 09:30:11.123000-05:00  74.90
-------
time    datetime64[ns, pytz.FixedOffset(-300)]
P                                      float64

убираем дубликаты по столбцу P:

df.drop_duplicates(['P'], inplace=True)

Получаем:

                                       time      P
2017-01-03 2020-02-11 09:30:00.083000-05:00  74.61
2017-01-03 2020-02-11 09:30:00.505000-05:00  74.99
2017-01-03 2020-02-11 09:30:08.555000-05:00  74.50
2017-01-03 2020-02-11 09:30:11.123000-05:00  74.90
→ Ссылка