pandas - 在 Pandas 多索引 DataFrame 上扩展指数权重,其中每一天都是一个矩阵
问题描述
我有一个多索引数据框,其中第一个索引是日期,每天都是一个 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 年 1 月 2 日,新的 df 是来自 df 的 2017 年 1 月 1 日和 2017 年 1 月 2 日 2 个矩阵的指数加权平均值。在 2017-01-03,它是 3 个矩阵的指数加权平均值。
我正在尝试 groupby/expanding/apply/ewm 的组合,但没有找到解决方案。
解决方案
下面会为你工作吗?按第二个索引分组,然后应用pandas.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
推荐阅读
- swift - Swift Pong(No SpriteKit):如何计算球的角度来移动球
- html - 如何在 html 模板中引用变量?
- azure - 服务终结点不适用于应用程序网关后面的 Azure Functions 代理
- java - Passay密码不重复字符序列
- mysql - MySQL如何检查值是否以字母开头并以数字结尾?
- sql - PostgreSQL 如何对文本值进行排序?
- python - 如何在本地安装和访问python模块?
- azure - Azure Durable Functions - 指向持久函数存储帐户的配置在哪里
- android - 从另一个类调用方法时获取null?
- arrays - 反应组件数组未映射