You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中仅计算最新日期的EWM相关系数,避免滚动计算?

高效计算EWM最新日期的相关系数

问题背景

给定如下示例DataFrame:

import pandas as pd

data = pd.DataFrame(
    {'a': [35, 85, 33, 95, 71],
     'b': [34, 54, 8, 9, 98],
     'c': [17, 31, 27, 45, 7]},
    index=pd.date_range('2023-01-01', '2023-01-05')
)

需要计算2023-01-05当天三个序列的EWM(指数加权移动)相关系数。直接使用data.ewm(alpha=0.01, adjust=True).corr(method='pearson')会生成所有日期的滚动相关系数,在数据量极大时计算耗时过长,因此需要一种只获取最新日期结果的高效方法。

解决方案

核心思路是通过EWM的均值、协方差矩阵推导相关系数矩阵,无需计算所有历史日期的滚动结果:

  1. 计算各列的EWM均值(仅取最后一行)
  2. 获取最新日期的EWM协方差矩阵
  3. 从协方差矩阵提取标准差
  4. 通过协方差矩阵与标准差外积的比值得到相关系数矩阵

实现代码:

alpha = 0.01
adjust = True

# 计算最新日期的EWM均值
ewm_mean = data.ewm(alpha=alpha, adjust=adjust).mean().iloc[-1]
# 获取最新日期对应的EWM协方差矩阵
ewm_cov = data.ewm(alpha=alpha, adjust=adjust).cov().iloc[-len(data.columns):]
# 计算各列的EWM标准差
ewm_std = ewm_cov.diagonal() ** 0.5
# 推导相关系数矩阵
corr_matrix = ewm_cov.div(ewm_std, axis=0).div(ewm_std, axis=1)

print(corr_matrix)

输出结果

a         b         c
a  1.000000  0.209568  0.478477
b  0.209568  1.000000 -0.748170
c  0.478477 -0.748170  1.000000

效率说明

这种方法仅计算到最新日期的EWM统计量,避免了生成全量滚动相关系数数据,在大数据集场景下能显著降低计算时间和内存占用。

内容的提问来源于stack exchange,提问作者younggotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:02:55