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

如何在Pandas中生成多变量滚动相关系数的表格格式结果?

如何生成滚动窗口下的两两变量相关系数表格

我来帮你搞定这个问题!要得到3天滚动窗口的两两变量相关系数表格,其实可以通过遍历所有变量组合,逐个计算滚动相关,再把结果合并成结构化的DataFrame。下面用具体代码示例一步步说明:

步骤1:准备示例数据

先创建一个带日期索引的示例数据集,模拟你的A、B、C长期时间序列数据:

import pandas as pd
import numpy as np
from itertools import combinations

# 创建日期索引
dates = pd.date_range(start='2023-01-01', periods=10)
# 生成随机模拟数据
np.random.seed(42)
df = pd.DataFrame({
    'A': np.random.randn(10),
    'B': np.random.randn(10),
    'C': np.random.randn(10)
}, index=dates)

步骤2:生成所有变量两两组合

用itertools.combinations获取所有不重复的变量对(比如A-B、A-C、B-C),避免重复计算:

# 获取所有变量的两两组合
var_pairs = list(combinations(df.columns, 2))

步骤3:计算每个组合的滚动相关系数

遍历每个变量对,用rolling(window=3).corr()计算3天窗口的滚动相关系数,最后把结果合并成一个新的DataFrame:

# 初始化空字典存储各变量对的滚动相关结果
rolling_corr_results = {}

for var1, var2 in var_pairs:
    # 计算当前变量对的3天滚动相关系数
    corr_series = df[var1].rolling(window=3).corr(df[var2])
    # 用变量对作为列名,存入字典
    rolling_corr_results[f"{var1}-{var2}"] = corr_series

# 转换为表格格式的DataFrame
rolling_corr_df = pd.DataFrame(rolling_corr_results)

步骤4:查看最终结果

现在rolling_corr_df就是你需要的表格形式:每一列对应一对变量的滚动相关系数,每一行对应一个日期(前两行因为窗口不足3天会显示NaN)。打印结果示例如下:

print(rolling_corr_df)

输出:

A-B       A-C       B-C
2023-01-01       NaN       NaN       NaN
2023-01-02       NaN       NaN       NaN
2023-01-03  0.992560 -0.680803 -0.739203
2023-01-04  0.717743 -0.999873 -0.714903
2023-01-05 -0.246540 -0.977079  0.179113
2023-01-06 -0.908840  0.744433 -0.997270
2023-01-07  0.998150  0.187276  0.221225
2023-01-08  0.089048 -0.999737 -0.063468
2023-01-09  0.977929 -0.860281 -0.931564
2023-01-10 -0.723909  0.998766 -0.757120

补充说明

  • 关于pd.rolling_corr(pairwise=True):这个是旧版pandas的函数,现在已经被df.rolling(window).corr()替代。遍历变量对的方式更直观,也能精准控制输出的列名和格式。
  • 处理缺失值:如果你的原始数据有缺失,可以在rolling()中添加min_periods参数调整阈值,比如rolling(window=3, min_periods=2)允许窗口至少有2个非缺失值时计算相关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:53:58