2014-11-22 6 views
2

Я хотел бы получить pearson r между x1 и каждым из трех столбцов y, эффективным образом.pd.corrwith на pandas dataframes с разными именами столбцов

Похоже, что 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 варианта.

Смежные вопросы