我有一个时间序列,A持有几个值.我需要获得一个B代数定义的系列如下:
B[t] = a * A[t] + b * B[t-1]
Run Code Online (Sandbox Code Playgroud)
在哪里我们可以假设B[0] = 0,a并且b是实数.
有没有办法在Pandas中进行这种类型的递归计算?或者我没有选择,只能按照这个答案中的建议循环使用Python ?
作为输入的一个例子:
> A = pd.Series(np.random.randn(10,))
0 -0.310354
1 -0.739515
2 -0.065390
3 0.214966
4 -0.605490
5 1.293448
6 -3.068725
7 -0.208818
8 0.930881
9 1.669210
Run Code Online (Sandbox Code Playgroud) 给出这样一个数据框df:
id_ val
11111 12
12003 22
88763 19
43721 77
...
Run Code Online (Sandbox Code Playgroud)
我想添加一列diff到df,并且它的每一行等于,我们说了,val在该行减去diff上一行和乘0.4,然后加入diff前一天:
diff = (val - diff_previousDay) * 0.4 + diff_previousDay
Run Code Online (Sandbox Code Playgroud)
并且diff第一行中的等于val * 4该行.也就是说,预期df应该是:
id_ val diff
11111 12 4.8
12003 22 11.68
88763 19 14.608
43721 77 ...
Run Code Online (Sandbox Code Playgroud)
我试过了:
mul = 0.4
df['diff'] = df.apply(lambda row: (row['val'] - df.loc[row.name, 'diff']) * mul + df.loc[row.name, 'diff'] if int(row.name) > 0 else …Run Code Online (Sandbox Code Playgroud)