Python 熊猫数据FRAMA手动EWMA计算未按预期工作。公式复制到列上?

Python 熊猫数据FRAMA手动EWMA计算未按预期工作。公式复制到列上?,python,pandas,dataframe,Python,Pandas,Dataframe,您好,我有以下数据,正在尝试使用公式生成EXMA系列: (Alpha*Prev_Exma)+(1-Alpha)*Outperf) 我的数据如下: Idx outperf alpha exma 0 NaN NaN NaN 1 NaN 0.999992 NaN 2 NaN 0.999962 NaN 3 NaN 0.999962 NaN 4 NaN 0.9999

您好,我有以下数据,正在尝试使用公式生成EXMA系列:

(Alpha*Prev_Exma)+(1-Alpha)*Outperf) 我的数据如下:

Idx  outperf    alpha     exma
0      NaN      NaN       NaN 
1      NaN      0.999992  NaN 
2      NaN      0.999962  NaN 
3      NaN      0.999962  NaN 
4      NaN      0.999924  NaN 
5      NaN      0.999813  NaN 
6      NaN      0.999991  NaN 
7      NaN      0.999995  NaN 
8      NaN      0.999929  NaN 
9      NaN      0.999985  NaN 
10     NaN      0.999994  NaN 
11     NaN      0.999975  NaN 
12     0.000000 0.999940  0 
13     0.026362 0.999837  NaN 
14     0.018579 0.999989  NaN 
15     0.026362 0.999951  NaN 
16     0.036501 0.999854  NaN 
17     0.028718 0.999987  NaN 
18     0.022635 0.999979  NaN 
19     0.018579 0.999986  NaN 
20     0.026362 0.999983  NaN 
df["exma"] = np.NaN                                  # To initialise the column
df["exma"][initialindex] = df.outperf[initialindex]  #To provide a starting value
df["exma"] = (df.alpha * df.exma.shift(1)) + ((1 - df.alpha) * df.outperf)  #Formula
我的代码如下:

Idx  outperf    alpha     exma
0      NaN      NaN       NaN 
1      NaN      0.999992  NaN 
2      NaN      0.999962  NaN 
3      NaN      0.999962  NaN 
4      NaN      0.999924  NaN 
5      NaN      0.999813  NaN 
6      NaN      0.999991  NaN 
7      NaN      0.999995  NaN 
8      NaN      0.999929  NaN 
9      NaN      0.999985  NaN 
10     NaN      0.999994  NaN 
11     NaN      0.999975  NaN 
12     0.000000 0.999940  0 
13     0.026362 0.999837  NaN 
14     0.018579 0.999989  NaN 
15     0.026362 0.999951  NaN 
16     0.036501 0.999854  NaN 
17     0.028718 0.999987  NaN 
18     0.022635 0.999979  NaN 
19     0.018579 0.999986  NaN 
20     0.026362 0.999983  NaN 
df["exma"] = np.NaN                                  # To initialise the column
df["exma"][initialindex] = df.outperf[initialindex]  #To provide a starting value
df["exma"] = (df.alpha * df.exma.shift(1)) + ((1 - df.alpha) * df.outperf)  #Formula
但当我执行命令时,我得到:

Idx  outperf    alpha     exma
0      NaN      NaN       NaN 
1      NaN      0.999992  NaN 
2      NaN      0.999962  NaN 
3      NaN      0.999962  NaN 
4      NaN      0.999924  NaN 
5      NaN      0.999813  NaN 
6      NaN      0.999991  NaN 
7      NaN      0.999995  NaN 
8      NaN      0.999929  NaN 
9      NaN      0.999985  NaN 
10     NaN      0.999994  NaN 
11     NaN      0.999975  NaN 
12     0.000000 0.999940  NaN
13     0.026362 0.999837  0.000004 
14     0.018579 0.999989  NaN 
15     0.026362 0.999951  NaN 
16     0.036501 0.999854  NaN 
17     0.028718 0.999987  NaN 
18     0.022635 0.999979  NaN 
19     0.018579 0.999986  NaN 
20     0.026362 0.999983  NaN 

计算仅适用于第13行(我希望看到从第13行开始的值),并且第12行中的初始值0(在本例中)被NaN覆盖。我做错了什么?

为什么在传递单行索引值时,您希望更新的不止一行?您还没有显示应用公式的代码,您可能是在“是”道歉之后-现在更正了!它不会像您期望的那样工作,因为在处理所有行之前df不会发生变化。我认为您需要查看
rolling\u apply
,正如我在尝试时所建议的:pd.rolling\u apply(df.exma,2,(df.alpha*df.exma.shift(1))+((1-df.alpha)*df.outperf)),它只返回一个包含所有NaN值的df。使用滚动应用时,窗口大小是否基于时间?没有其他方法引用前一行中的值。抱歉,如果这是一个愚蠢的问题(这里是新手),我会考虑使用Excel的“填充”功能进行计算。