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

Get correlation between a subset of columns in pandas

所以,我熟悉一些更高级的 Pandas 索引和对 columns/rows 数据使用 .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 中手动获得像这样的简单输出?

提前谢谢你。

使用 pandas

中的 corr
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

如果坚持不用DataFrame.corr():

  • 您没有向 numpy 函数发送正确的列表。您希望每一列都作为自己的列表,因此您应该使用 DataFrame 的 transpose

  • 您需要相关矩阵,而不是协方差矩阵,因此您应该使用 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.        ]])