Python-Pandas指数加权平均法在逆向Ord中的应用

2024-09-27 07:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

为了熊猫.DataFrame示例:

In: cols = ['cols1', 'cols2']
In: df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]})

Out:       col1  col2
      0     1     3
      1     2     4
      2     3     5
      3     4     6

我使用指数加权平均值:

^{pr2}$ 这太好了!但是,权重是从上到下按指数递减的值应用的:

  Out:      col1      col2
      0  1.000000  3.000000
      1  1.833333  3.833333
      2  2.774194  4.774194
      3  3.756410  5.756410

我想知道是否有一种方法可以按相反的顺序(自下而上)应用权重。我想要的输出是:

Out:          col1          col2
      0     0.9391025     2.8173075
      1     1.8494627     3.6982925
      2     2.7499995     4.5833325
      3     4.000000      6.000000

Tags: in示例dataframedf指数outcol2col1
2条回答

kel's solution上的变体。在

请注意

df[col].reindex(index=df.index[::-1])

达到类似的结果:

df[col].sort_index(ascending=False)

一个不同之处在于reindex改变了索引,而{}将{}作为一个选项。因此,sort_index的一个优点是,与reindex不同的是,您不需要在结尾处切换回原来的内容:

df[col] = df[col].sort_index(ascending=False).ewm(...).mean()

还请注意,带有sort_index的解决方案当然假定索引值的顺序是正确的。如果他们没有,我不确定采取滚动平均数是否会 身体上有意义。在

我找到了解决问题的办法。可以在应用ewm()之前和之后重新编制索引:

In: df.reindex(index=df.index[:-1])
    for i in range(len(df.columns)):
        df[cols[i]] = df[cols[i]].ewm(com=None, span=None, halflife=None, 
                                      alpha=.8, min_periods=0, adjust=True,
                                      ignore_na=False, axis=0).mean()
Out:        col1      col2
      3  4.000000  6.000000
      2  3.166667  5.166667
      1  2.225806  4.225806
      0  1.243590  3.243590

然后您可以再次应用:

^{pr2}$

我还不确定这是不是最有效的方法。所以,如果有人有其他想法,我很想知道。在

相关问题 更多 >

    热门问题