所以,我熟悉一些更高级的Pandas索引以及在数据的列/行上使用.apply()
,但由于某种原因,我无法弄清楚如何手动获取某些列的方差 - 协方差矩阵恢复到.corr()
。
每当我尝试以下方法来切片我想要的列(所有行以及“APPL R”之后的所有列),
a = np.cov(data1.loc[:,'AAPL R':])
我得到了一个像
这样的答案array([[ 7.27823733e-04, 2.26078140e-04, 1.99410574e-04, ...,
9.57801851e-05, -2.76751908e-04, 5.71509542e-05],
[ 2.26078140e-04, 1.26173616e-04, 2.17306383e-04, ...,
3.30070375e-05, -2.47989495e-05, 1.16819595e-05],
[ 1.99410574e-04, 2.17306383e-04, 1.92984210e-03, ...,
-2.27400788e-04, -4.46589343e-05, -5.90865613e-05],
...,
[ 9.57801851e-05, 3.30070375e-05, -2.27400788e-04, ...,
如何在Pandas中手动获取这样的简单输出?
提前谢谢。
答案 0 :(得分:2)
如果您坚持不使用DataFrame.corr()
:
您没有向numpy
功能发送正确的列表。您希望每列都作为自己的列表,因此您应该使用DataFrame的转置。
您需要相关矩阵,而不是协方差矩阵,因此您应该使用np.corrcoef()
。 (如果你真的想要协方差矩阵,那就好用np.cov()
)
这是我在另一个问题中记忆中的df
。
open high low close volume
date
2017-11-01 44.66 44.75 42.19 42.93 3500
2017-11-03 44.66 44.75 42.19 42.93 3500
2017-11-06 43.15 43.75 40.60 41.02 9200
2017-11-07 43.15 43.75 40.60 41.02 9200
2017-11-08 43.15 43.75 40.60 41.02 9200
2017-11-09 43.15 43.75 40.60 41.02 9200
2017-11-10 43.15 43.75 40.60 41.02 9200
2017-11-13 41.60 43.21 40.03 42.36 3575
2017-11-14 41.60 43.21 40.03 42.36 3575
...
df.corr()
# open high low close volume
#open 1.000000 0.891708 0.957078 0.351604 0.320314
#high 0.891708 1.000000 0.878307 0.610183 0.311939
#low 0.957078 0.878307 1.000000 0.559366 0.146151
#close 0.351604 0.610183 0.559366 1.000000 -0.132609
#volume 0.320314 0.311939 0.146151 -0.132609 1.000000
np.corrcoef(df.loc[:,'open':].values.T)
#array([[ 1. , 0.89170836, 0.95707833, 0.35160354, 0.32031362],
# [ 0.89170836, 1. , 0.87830748, 0.61018322, 0.31193906],
# [ 0.95707833, 0.87830748, 1. , 0.55936625, 0.14615072],
# [ 0.35160354, 0.61018322, 0.55936625, 1. , -0.13260909],
# [ 0.32031362, 0.31193906, 0.14615072, -0.13260909, 1. ]])
答案 1 :(得分:1)
使用corr
pandas
df=pd.DataFrame({'V1':[1,2,3],'V2':[3,2,1],'V3':[3,4,9]})
df.corr()
Out[431]:
V1 V2 V3
V1 1.000000 -1.000000 0.933257
V2 -1.000000 1.000000 -0.933257
V3 0.933257 -0.933257 1.000000