获取pandas中列的子集之间的相关性

时间:2018-04-30 03:22:09

标签: python pandas statistics covariance

所以,我熟悉一些更高级的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中手动获取这样的简单输出?

enter image description here

提前谢谢。

2 个答案:

答案 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