如何在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
相关产品推荐
相关产品推荐

