扩展 Pandas 多索引数据帧上的指数权重,其中每一天都是一个矩阵



我有一个多索引数据帧,其中第一个索引是日期,每天是一个 3x3 矩阵:

multi_index = pd.MultiIndex.from_product([[pd.datetime(2017, 1, 1),pd.datetime(2017, 1, 2),pd.datetime(2017, 1, 3)], ['A','B','C']])
df = pd.DataFrame(index=multi_index, data={"A": [1, 2, 3, 4, 1, 2, 3, 4, 2],"B": [1, 2, 3, 4, 1, 2, 3, 4, 2],"C": [1, 2, 3, 4, 1, 2, 3, 4, 2]})

我想创建一个与 df 结构相同的新数据帧,但这些值是矩阵扩展窗口的指数加权平均值。

所以对于 2017-01-01,新 df 与旧 df 相同。在 2017-01-02,新的 df 是 df 在 2017-01-01 和 2017-01-02 上的 2 个矩阵的指数加权平均值。在 2017-01-03 上,它是 3 个矩阵的指数加权平均值。

我正在尝试分组/扩展/应用/ewm 的组合,但没有找到解决方案。

下面对你有用吗?按第二个索引分组,然后应用熊猫。DataFrame.ewm

print(df)
A  B  C
2017-01-01 A  1  1  1
B  2  2  2
C  3  3  3
2017-01-02 A  4  4  4
B  1  1  1
C  2  2  2
2017-01-03 A  3  3  3
B  4  4  4
C  2  2  2
result = df.groupby(level=1).apply(lambda x: x.ewm(1).mean())
print(result)
A         B         C
2017-01-01 A  1.000000  1.000000  1.000000
B  2.000000  2.000000  2.000000
C  3.000000  3.000000  3.000000
2017-01-02 A  3.000000  3.000000  3.000000
B  1.333333  1.333333  1.333333
C  2.333333  2.333333  2.333333
2017-01-03 A  3.000000  3.000000  3.000000
B  2.857143  2.857143  2.857143
C  2.142857  2.142857  2.142857

最新更新