pd.corrwith en marcos de datos pandas con diferentes nombres de columna

Me gustaría obtener la r de Pearson entre x1 y cada una de las tres columnas en y, de una manera eficiente.

Parece que pd.corrwith () solo puede calcular esto para columnas que tienen exactamente las mismas tags de columna, por ejemplo, x e y.

Esto parece poco práctico, ya que supongo que las correlaciones de cálculo entre diferentes variables serían un problema común.

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 

Puede lograr lo que desee utilizando DataFrame.corrwith(Series) lugar de 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 

Alternativamente, puede formar la matriz de correlaciones entre cada columna de x y cada columna de y siguiente manera:

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

Alas DataFrame.corrwith() no tiene una opción pairwise=True .

Puede hacer esto (con 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) 

para obtener este resultado:

 A -0.509 B 0.041 C -0.732