我想区分时间序列以使其静止。但是,不能保证通过第一个滞后会使时间序列静止。生成如下示例 Pandas 数据框
test = {'A':[10,15,19,24,23]}
test_df = pd.DataFrame(test)
通过使用diff()
方法,我们可以按预期采取第一个滞后,但如果我尝试,diff(2)
即如果我想使用 2 的滞后期,我不会得到预期的结果。
预期产出
+----+-------+-------+
| A | Lag 1 | Lag 2 |
+----+-------+-------+
| 10 | NA | NA |
| 15 | 5 | NA |
| 19 | 4 |-1 |
| 24 | 5 | 1 |
| 23 |-1 |-6 |
+----+-------+-------+
结果输出
+----------------+
| A lag1 lag2 |
+----------------+
| 10 NaN NaN |
| 15 5.0 NaN |
| 19 4.0 9.0 |
| 24 5.0 9.0 |
| 23 -1.0 4.0 |
+----------------+
上面的输出是使用生成的test_df['lag2'] = test_df['A'].diff(2)
。如何仅使用Lag 2
时间序列获得预期输出并重新生成实际时间序列?
编辑 1 这个问题与任何数据类型转换或 NaN 无关,并且被错误地标记为重复。明确提到了预期的输出,问题的范围与这里提到的完全不同。
编辑 2 要处理更多数量的样本,可以使用虚拟数据框。
test = np.random.randint(100, size=500)
test_df = pd.DataFrame(test, columns = ['A'])
编辑 3 为了更多地解释预期输出,请考虑下面的预期输出。
+----+-------+-------+
| A | Lag 1 | Lag 2 |
+----+-------+-------+
| 10 | NA | NA |
| 15 | 5 | NA |
| 19 | 4 | -1 |
| 24 | 5 | 1 |
| 23 | -1 | -6 |
| 50 | 27 | 28 |
| 34 | -16 | -43 |
| 56 | 22 | 38 |
| 33 | -23 | -45 |
| 26 | -7 | 16 |
| 45 | 19 | 26 |
+----+-------+-------+
test = {'A': [10,15,19,24,23,50,34,56,33,26,45]}
test_df = pd.DataFrame(test)
Lag 1
可以使用创建此列的
test_df['lag1'] = test_df['A'].diff()
。但要创建lag 2
我需要做的test_df['lag2'] = test_df['A'].diff().diff()
. 如果我必须进行 365 次滞后,此解决方案将不起作用。因此,我需要一个解决方案需要原始系列的滞后A
,然后递归地使用滞后lag1
来生成lag2
等等。
一旦我们创建了滞后项lag2
,我们如何从中检索原始系列?