首页 > 解决方案 > 时间序列平稳技术

问题描述

我正在处理时间序列数据(非平稳),我已申请.diff(periods=n)区分数据以消除数据中的趋势和季节性因素。

通过使用,从当前观察值 ( ) 中减去.diff(periods=n)上一个时间步 ( ) 的观察值。t-1t

现在我想将差异数据反转回其原始比例,但我遇到了问题。你可以在这里找到代码。

我的差异代码:

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 行的反转数据。它将值反转并向上移动一行。我的问题是,为什么?我错过了什么?

谢谢你!

标签: pythontensorflow

解决方案


在这一行:

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

data_diff从第二行开始,这就是它出现的原因,因为它可以向上移动。
这样做的原因是因为您使用.shift(-1).

一个简单的解决方案是使用df.cumsum()因为它与df.diff().

您唯一需要做的就是获取第一行来替换数据框中的NaNdata_diff。您需要这样做,因为它是每隔一行将添加到的原始行。之后,你打电话data_diff.cumsum(),现在你有了原始数据。

这是详细的代码。

data_diff.iloc[0]=df.iloc[0]
a = data_diff.cumsum()

推荐阅读