Стационарный метод временных рядов

Я работаю с данными временных рядов (нестационарными), я применил .diff(periods=n) для разграничения данных, чтобы исключить из данных тренды и факторы сезонности.

При использовании .diff(periods=n) наблюдение из предыдущего временного шага (t-1) вычитается из текущего наблюдения (t).

Теперь я хочу вернуть разностные данные к исходному масштабу, но у меня с этим проблемы. Код можно найти здесь.

Мой код для разности:

data_diff = df.diff(periods=1)     

data_diff.head(5) 

Мой код для инвертирования разностных данных обратно в исходный масштаб:

cols = df.columns
x = []
for col in cols:
    diff_results = df[col] + data_diff[col].shift(-1)
    x.append(diff_results)
diff_df_inverted = pd.concat(x, axis=1)

diff_df_inverted

Как вы можете видеть из последнего вывода в коде, я успешно инвертировал свои данные обратно в исходный масштаб. Однако я не получаю инвертированные данные для строки 1. Он инвертирует и сдвигает значения вверх по строке. Мой вопрос, почему? Что мне не хватает?

спасибо!


person Jack_T    schedule 12.07.2020    source источник


Ответы (1)


В этой строке:

diff_results = df[col] + data_diff[col].shift(-1)

data_diff начинается со второй строки, и именно поэтому он отображается так, как будто его можно сдвинуть вверх.
Причина этого в том, что вы используете .shift(-1).

Простым решением будет использование df.cumsum(), так как это полная противоположность df.diff().

Единственное, что вам нужно сделать, это получить первую строку для замены значений NaN из вашего фрейма данных data_diff. Вам нужно сделать это, потому что это исходная строка, к которой будут добавлены все остальные строки. После этого вы вызываете data_diff.cumsum() и теперь у вас есть исходные данные.

Вот подробный код.

data_diff.iloc[0]=df.iloc[0]
a = data_diff.cumsum()
person H. pap    schedule 12.07.2020
comment
Спасибо @Х. папа . Я понимаю, что .cumsum() будет кумулятивно добавлять значения в каждую строку. Однако я использую его для добавления значений в каждый столбец между двумя кадрами данных (df и data_diff)? - person Jack_T; 13.07.2020
comment
#как им пользоваться - person Jack_T; 13.07.2020
comment
@Jack_T Я обновил свой ответ. Не стесняйтесь задавать вопросы, если они у вас еще остались. - person H. pap; 14.07.2020
comment
Легко и просто. Оценил вашу помощь! - person Jack_T; 14.07.2020
comment
@Jack_T, если этот ответ отвечает на ваш вопрос, установите зеленый флажок слева, чтобы пометить его как ответ. - person DV82XL; 18.07.2020