2014-11-22 34 views
2

我想以有效的方式在x1和y中的三列中的每一列之间得到pearson r。pd.corrwith带有不同列名的熊猫数据框

似乎pd.corrwith()只能为具有完全相同列标签的列计算此值,例如x和y。

这似乎有点不切实际,因为我认为计算不同变量之间的相关性是一个常见问题。

In [1]: import pandas as pd; import numpy as np 

In [2]: x = pd.DataFrame(np.random.randn(5,3),columns=['A','B','C']) 

In [3]: y = pd.DataFrame(np.random.randn(5,3),columns=['A','B','C']) 

In [4]: x1 = pd.DataFrame(x.ix[:,0]) 

In [5]: x.corrwith(y) 
Out[5]: 
A -0.752631 
B -0.525705 
C 0.516071 
dtype: float64 

In [6]: x1.corrwith(y) 
Out[6]: 
A -0.752631 
B   NaN 
C   NaN 
dtype: float64 

回答

0

你可以做到这一点(与np.random.seed(0)):

x1 = pd.DataFrame(pd.Series(x.ix[:,0]).repeat(x.shape[1]).reshape(x.shape), columns=x.columns) 
x1.corrwith(y) 

得到这样的结果:

A -0.509 
B 0.041 
C -0.732 
8

你可以完成你想要使用什么DataFrame.corrwith(Series)而不是DataFrame.corrwith(DataFrame)

In [203]: x1 = x['A'] 

In [204]: y.corrwith(x1) 
Out[204]: 
A 0.347629 
B -0.480474 
C -0.729303 
dtype: float64 

或者,也可以形成x每一列和y每一列之间的相关性的矩阵如下:

In [214]: pd.expanding_corr(x, y, pairwise=True).iloc[-1, :, :] 
Out[214]: 
      A   B   C 
A 0.347629 -0.480474 -0.729303 
B -0.334814 0.778019 0.654583 
C -0.453273 0.212057 0.149544 

DataFrame.corrwith()不具有pairwise=True选项。