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是违反数据框的性质的。我想知道是否有更有效的方法来实现我的目标。
颜色编码的方框是:
- 红色:2 天收盘价的相关性
- 蓝色: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)
我从雅虎财经下载了 2 只股票的历史价格,并合并了 2 个数据框,以计算它们在不同时间段收盘价的相关性(见合并数据框的附图):
2 天(盘中) 3天 5 天
我想到的一种方法是从数据框的底部迭代行,并获得 Close_x 和 Close_y 两列的子集,大小为 2/3 /5 行并分别计算相关性。计算出的相关性将作为列添加到合并的数据框中。
我是Pandas数据框的新手,我认为迭代每个row/column是违反数据框的性质的。我想知道是否有更有效的方法来实现我的目标。
颜色编码的方框是:
- 红色:2 天收盘价的相关性
- 蓝色: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)