Pandas 在每天都是矩阵的多索引数据帧上扩展指数权重

Pandas 在每天都是矩阵的多索引数据帧上扩展指数权重,pandas,dataframe,multi-index,Pandas,Dataframe,Multi Index,我有一个多索引数据框,其中第一个索引是日期,每天是一个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

我有一个多索引数据框,其中第一个索引是日期,每天是一个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上的两个矩阵的指数加权平均值。2017年1月3日,它是3个矩阵的指数加权平均值


我尝试了groupby/expansing/apply/ewm的组合,但没有找到解决方案

下面的内容适合您吗?按第二个索引分组,然后应用


我喜欢这个问题!我的理解是,
ewm
只有滚动窗口功能。因此,我最初的猜测是使用
展开
,然后使用自定义函数进行指数平均。@gofvonx它似乎“展开”对行有效,而不是对每日协方差矩阵有效。如果你能用给出的数据展示一个例子,那就太好了。
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