我想以高效的方式在x1和y中的三列中的每一列之间获得pearson r。
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 :(得分:11)
您可以使用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
Alas DataFrame.corrwith()
没有pairwise=True
选项。
答案 1 :(得分: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