python - 时间序列平稳技术
问题描述
我正在处理时间序列数据(非平稳),我已申请.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 行的反转数据。它将值反转并向上移动一行。我的问题是,为什么?我错过了什么?
谢谢你!
解决方案
在这一行:
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()
推荐阅读
- redux - Immutable.js:创建一个包含一个元素的列表
- javascript - 触发 Modal 以在 useEffect 挂钩内显示的问题
- javascript - AWS Lambda 函数:无法读取未定义的属性 'logs' 'numberOfPages' 'stream'。包问题或 AWS Lambda 问题?
- html - 如何使用 CSS 隐藏行中的内联元素溢出?
- mysql - 如何允许我的团队成员访问我的 AWS mySQL 数据库?
- python - 如何在数据框中选择 NaN 单元格?
- reactjs - 开玩笑测试未通过创建反应应用程序
- java - 是否保证来自 ExecutorService 的线程更新本地声明的并发 hashmap?
- list - ELM:当我单击按钮时,Onlick 按钮可将 HTML 消息中的特定字符串移植到 JS
- java - 如何在 java 8 中创建嵌套对象列表?