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

