Мне нужно вычислить EMA для набора данных из CSV-файла, где даты указаны в descending order.
Когда я применяю pandas.DataFrame.ewm, я получаю EMA для последнего (по дате), равное значению. Это потому, что ewm начинает наблюдение сверху вниз в DataFrame.
Пока что я не смог найти вариант сделать его обратным для ewm. Так что, думаю, мне придется перевернуть весь мой набор данных.
Может быть, кто-нибудь знает, как заставить ewm начинать с нижних значений? Или рекомендуется всегда использовать datetimeindex в хронологическом порядке? От самых старых значений вверху к самым новым внизу?
Из документации панд:
Время, соответствующее наблюдениям. Должен быть монотонно возрастающим и иметь тип datetime64[ns].
Я думаю, datetimeindex должен быть хронологическим.
Вы можете просто временно сбросить свой индекс.
df.index.name = 'date' # IF YOU HAVEN'T SET A NAME YET
df = df.reset_index(drop=False)
# PERFORM EWM OPERATIONS
Затем верните его к исходному DateTimeIndex
df = df.set_index('date')
Я предложил аналогичный вопрос здесь: скользящее окно в фрейме данных pandas в обратном порядке дат?
Где заключительные варианты:
Двойной реверс предпочтительнее, потому что сортировка «дорогая» (хотя я сам не сравнивал оба варианта).
В связи с этим: рекомендуется иметь монотонно увеличивающийся индекс. Он оптимизирует операции поиска в pd.Series и, соответственно, в pd.DataFrame.