【问题标题】:Pandas Dataframe: compute the correlation of 2-day, 3-day and 5-day stocks pricesPandas Dataframe:计算 2 天、3 天和 5 天股票价格的相关性
【发布时间】:2021-10-21 17:06:56
【问题描述】:

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

2 天(日内) 3天 5天

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

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

颜色编码的框是:

  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'])

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

最后2行的相关性为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

【问题讨论】:

标签: python pandas dataframe numpy correlation


【解决方案1】:

根据 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多