Pandas Dataframe:计算 2 天、3 天和 5 天股票价格的相关性

Pandas Dataframe: compute the correlation of 2-day, 3-day and 5-day stocks prices

我从雅虎财经下载了 2 只股票的历史价格,并合并了 2 个数据框,以计算它们在不同时间段收盘价的相关性(见合并数据框的附图):

2 天(盘中) 3天 5 天

我想到的一种方法是从数据框的底部迭代行,并获得 Close_x 和 Close_y 两列的子集,大小为 2/3 /5 行并分别计算相关性。计算出的相关性将作为列添加到合并的数据框中。

我是Pandas数据框的新手,我认为迭代每个row/column是违反数据框的性质的。我想知道是否有更有效的方法来实现我的目标。

颜色编码的方框是:

  1. 红色:2 天收盘价的相关性
  2. 蓝色:3 天内的相关性...
  3. 绿色:5 天的相关性...
df = pd.DataFrame([[23.02000046, 23.13999939, 24.21999931, 26.70000076, 28.03000069], 
[445.9200134, 446.9700012, 444.0400085, 439.1799927, 439.8599854]], columns = ['Close_x', 'Close_y'])

对于上述代码中提取的数据,预期结果为

最后两行的相关性是 1:

最后 3 行的相关性是 -0.8867: 最后 5 行的相关性是 -0.9510:

最终输出会将相关系数作为新列。 添加相关系数作为新列,它将如下所示:

    Close_x      Close_y    2D_Corr   3D_Corr    5D_Corr
    23.02000046  445.9200134     ...      ...         ...
    23.13999939  446.9700012     ...       ...         ...
    24.21999931  444.0400085               
    26.70000076  439.1799927
    28.03000069  439.8599854       1      -0.8867    -0.9510

根据 TM Bailey 的评论,您可以使用滚动:

Close_x = [23.02000046, 23.13999939, 24.21999931, 26.70000076, 28.03000069]
Close_y = [445.9200134, 446.9700012, 444.0400085, 439.1799927, 439.8599854]

s1 = pd.Series(Close_x)
s2 = pd.Series(Close_y)

s1.rolling(5).corr(s2)