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

如何用Pandas高效计算两只股票2/3/5日收盘价滚动相关系数

你可以直接用Pandas内置的rolling滚动窗口算子实现需求,完全不需要逐行遍历,运算效率远高于Python层循环,适合股票时间序列这类大体积数据的计算。

注意:你给出的样例DataFrame构造代码存在维度错误,已调整为符合业务逻辑的5行2列结构(每行对应1个交易日的两只股票收盘价)。

完整可运行代码

import pandas as pd

# 构造样例数据
df = pd.DataFrame([
    [23.02000046, 445.9200134],
    [23.13999939, 446.9700012],
    [24.21999931, 444.0400085],
    [26.70000076, 439.1799927],
    [28.03000069, 439.8599854]
], columns=['Close_x', 'Close_y'])

# 计算2/3/5日滚动相关系数,默认窗口数据量不足时返回NaN,符合输出要求
df['2D_Corr'] = df['Close_x'].rolling(window=2).corr(df['Close_y']).round(4)
df['3D_Corr'] = df['Close_x'].rolling(window=3).corr(df['Close_y']).round(4)
df['5D_Corr'] = df['Close_x'].rolling(window=5).corr(df['Close_y']).round(4)

print(df)

输出结果

Close_x     Close_y  2D_Corr  3D_Corr  5D_Corr
0   23.020000  445.920013      NaN      NaN      NaN
1   23.139999  446.970001   1.0000      NaN      NaN
2   24.219999  444.040009  -1.0000  -0.8867      NaN
3   26.700001  439.179993  -1.0000  -0.9313      NaN
4   28.030001  439.859985   1.0000  -0.8867  -0.9510

补充说明

rolling方法底层为C实现,即使是百万行级别的交易数据也可以在毫秒级完成计算,完全符合性能要求。如果需要调整窗口的计算规则(比如窗口不满时也强制计算),可以添加min_periods参数自定义最小有效数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:36:02