我有一个时间序列,如下所示:
United Kingdom
Time (CET)
2020-02-15 1739771
2020-02-16 1649750
2020-02-17 1887394
2020-02-18 1922006
2020-02-19 1957194
2020-02-20 1878259
2020-02-21 1890076
2020-02-22 1677928
2020-02-23 1688218
2020-02-24 1948947
[...]
我想制作一个新列,它是长度为 5 的滚动窗口的梯度。因此,第一个条目将是拟合通过[1739771, 1649750, 1887394, 1922006, 1957194]
的直线的梯度,第二个条目是通过[1649750, 1887394, 1922006, 1957194, 1878259]
拟合的直线的梯度,依此类推。
拟合直线并因此返回梯度的代码为:
import numpy as np
Polynomial = np.polynomial.Polynomial
def fitcurve(sequence):
poly = Polynomial.fit(range(len(sequence)), sequence, 1)
a = poly.convert().coef
return a[0], a[1] # a[1] is the gradient we want.
新列中的前 4 个条目必须是 NaN,这是可以的。
如何制作此新列?
您应该使用滚动功能。这样的事情应该有效:
df["UK Rolling"] = df["United Kingdom"].rolling(5).apply(lambda x: fitcurve(x)[1])