2017-12-12 4 views
4

Ich habe zwei Pandas Datenrahmen d1 und d2, die wie diese aussehen:Compute euklidischen Abstand zwischen den Reihen von zwei Pandas Datenrahmen

d1 wie folgt aussieht:

output value1 value2 value2 
    1   100  103  87 
    1   201  97.5  88.9 
    1   144  54  85 

d2 wie folgt aussieht:

output value1 value2 value2 
    0   100  103  87 
    0   201  97.5  88.9 
    0   144  54  85 
    0   100  103  87 
    0   201  97.5  88.9 
    0   144  54  85 

Die Spaltenausgabe hat den Wert 1 für alle Zeilen in d1 und 0 für alle Zeilen in d2. Es ist eine Gruppierungsvariable. Ich muss euklidischen Abstand zwischen jeder Reihe von d1 und d2 finden (nicht innerhalb von d1 oder d2). Wenn d1m Zeilen hat und d2 hat n Reihen, dann wird der Abstand Matrix m Zeilen und n Spalten

Antwort

6

Durch die Verwendung von scipy.spatial.distance.cdist:

import scipy 

ary = scipy.spatial.distance.cdist(d1.iloc[:,1:], d2.iloc[:,1:], metric='euclidean') 

pd.DataFrame(ary) 
Out[1274]: 
      0   1   2   3   4   5 
0 0.000000 101.167485 65.886266 0.000000 101.167485 65.886266 
1 101.167485 0.000000 71.808495 101.167485 0.000000 71.808495 
2 65.886266 71.808495 0.000000 65.886266 71.808495 0.000000 
Verwandte Themen