熊猫-滚动坡度计算

Lcy*_*Lcy 6 python regression pandas

如何计算每列的滚动(窗口= 60)值的斜率(步长为5)?

我想每5分钟计算一次值,不需要每条记录的结果。

以下是示例数据框和结果:

df
Time                A    ...      N
2016-01-01 00:00  1.2    ...    4.2
2016-01-01 00:01  1.2    ...    4.0
2016-01-01 00:02  1.2    ...    4.5
2016-01-01 00:03  1.5    ...    4.2
2016-01-01 00:04  1.1    ...    4.6
2016-01-01 00:05  1.6    ...    4.1
2016-01-01 00:06  1.7    ...    4.3
2016-01-01 00:07  1.8    ...    4.5
2016-01-01 00:08  1.1    ...    4.1
2016-01-01 00:09  1.5    ...    4.1
2016-01-01 00:10  1.6    ...    4.1
....

result
Time                A    ...      N
2016-01-01 00:04  xxx    ...    xxx
2016-01-01 00:09  xxx    ...    xxx
2016-01-01 00:14  xxx    ...    xxx
...
Run Code Online (Sandbox Code Playgroud)

df.rolling函数可以应用于此问题吗?

NaN在窗口中很好,这意味着子集可以小于60。

小智 6

看来你想要的是以特定的步长滚动。但是,根据pandas 的文档,目前 .pandas中不支持步长rolling

如果数据量不太大,只需对所有数据进行滚动并通过索引选择结果即可。

这是一个示例数据集。为简单起见,时间列使用整数表示。

data = pd.DataFrame(np.random.rand(500, 1) * 10, columns=['a'])
Run Code Online (Sandbox Code Playgroud)
            a
0    8.714074
1    0.985467
2    9.101299
3    4.598044
4    4.193559
..        ...
495  9.736984
496  2.447377
497  5.209420
498  2.698441
499  3.438271
Run Code Online (Sandbox Code Playgroud)

然后滚动并计算坡度,

            a
0    8.714074
1    0.985467
2    9.101299
3    4.598044
4    4.193559
..        ...
495  9.736984
496  2.447377
497  5.209420
498  2.698441
499  3.438271
Run Code Online (Sandbox Code Playgroud)

结果将是,

            a
4   -0.542845
9    0.084953
14   0.155297
19  -0.048813
24  -0.011947
..        ...
479 -0.004792
484 -0.003714
489  0.022448
494  0.037301
499  0.027189
Run Code Online (Sandbox Code Playgroud)

或者,你可以参考这篇文章。第一个答案提供了一种 numpy 方法来实现此目的: pandas.DataFrame.rolling 中的步长