2017-01-24 6 views
3

Ich habe eine Reihe von Spalten (col1, col2, col3) in Datenrahmen auszuführen diese df1 habe ich eine andere Gruppe von Spalten (col4, COL5, Sp6) in Datenrahmen df2 Angenommen Zwei Datenrahmen haben dieselbe Anzahl von Zeilen.Wie Korrelation zwischen zwei Datenrahmen mit unterschiedlichen Spaltennamen

Wie erzeuge ich eine Korrelationstabelle, die paarweise Korrelation zwischen df1 und df2?

wird die Tabelle aussehen

col1 col2 col3 
col4 .. .. .. 
col5 .. .. .. 
col6 .. .. .. 

ich df1.corrwith(df2) verwenden, es scheint nicht, um die Tabelle zu erzeugen, wie dies erforderlich ist.

Ich habe die Antwort bei How to check correlation between matching columns of two data sets? gesehen, aber der Hauptunterschied ist, dass die Col-Namen nicht übereinstimmt.

Antwort

2

pandas quick and dirty

pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).corr().loc['df2', 'df1'] 

numpy sauber

def corr(df1, df2): 
    n = len(df1) 
    v1, v2 = df1.values, df2.values 
    sums = np.multiply.outer(v2.sum(0), v1.sum(0)) 
    stds = np.multiply.outer(v2.std(0), v1.std(0)) 
    return pd.DataFrame((v2.T.dot(v1) - sums/n)/stds/n, 
         df2.columns, df1.columns) 

corr(df1, df2) 

Beispiel

df1 = pd.DataFrame(np.random.rand(10, 4), columns=list('abcd')) 

df2 = pd.DataFrame(np.random.rand(10, 3), columns=list('xyz')) 

pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).corr().loc['df2', 'df1'] 

      a   b   c   d 
x 0.235624 0.844665 -0.647962 0.535562 
y 0.357994 0.462007 0.205863 0.424568 
z 0.688853 0.350318 0.132357 0.687038 

corr(df1, df2) 

      a   b   c   d 
x 0.235624 0.844665 -0.647962 0.535562 
y 0.357994 0.462007 0.205863 0.424568 
z 0.688853 0.350318 0.132357 0.687038 
+0

Danke, aber ich bin im Vergleich kategoriale Felder stattdessen habe ich beschlossen, es als eine neue Frage zu stellen, könnten Sie hier einen Blick helfen, Vielen Dank im Voraus: http://stackoverflow.com/questions/41827716/how-to-perform-correlation-between-categorical-columns – sweetyBaby

+0

@piRSquared Warum sagen Sie, dass die Pandas soluti Ist das "dreckig"? Ich denke, es ist ein toller Einzeiler, der Teil des Pandas-Pakets sein sollte – tashuhka

+0

@Tashuhka du hast Recht. Schneller und weniger schmutzig (-: – piRSquared

Verwandte Themen