2017-10-24 2 views
0

Ich habe einen DatenrahmenFinden euklidischen Abstand von einem Punkt auf Zeilen in Pandas Datenrahmen

id lat  long 
1  12.654 15.50 
2  14.364 25.51 
3  17.636 32.53 
5  12.334 25.84 
9  32.224 15.74 

Ich mag den euklidischen Abstand dieser Koordinaten von einer particulat Position in einer Liste L1 gespeichert finden

L1 = [11.344,7.234] 

ich möchte eine neue Spalte in df schaffen, wo ich die Abstände

id  lat  long distance 
1  12.654 15.50 
2  14.364 25.51 
3  17.636 32.53 
5  12.334 25.84 
9  32.224 15.74 

ich weiß, müssen findet euklidischen Abstand zwischen zwei Punkten mit math.hypot():

dist = math.hypot(x2 - x1, y2 - y1) 

Wie schreibe ich eine Funktion über Zeilen mit anwenden oder iterieren mir Entfernungen zu geben.

Antwort

2

Verwendung vektorisiert Ansatz

In [5463]: (df[['lat', 'long']] - np.array(L1)).pow(2).sum(1).pow(0.5) 
Out[5463]: 
0  8.369161 
1 18.523838 
2 26.066777 
3 18.632320 
4 22.546096 
dtype: float64 

Welche auch

In [5468]: df['distance'] = df[['lat', 'long']].sub(np.array(L1)).pow(2).sum(1).pow(0.5) 

In [5469]: df 
Out[5469]: 
    id  lat long distance 
0 1 12.654 15.50 8.369161 
1 2 14.364 25.51 18.523838 
2 3 17.636 32.53 26.066777 
3 5 12.334 25.84 18.632320 
4 9 32.224 15.74 22.546096 

Option 2 Verwenden Numpy eingebaut in np.linalg.norm Vektornorm sein kann.

In [5473]: np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1) 
Out[5473]: array([ 8.36916101, 18.52383805, 26.06677732, 18.63231966, 22.5460958 ]) 

In [5485]: df['distance'] = np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1) 
2

Translating [(x 2 - x) + (y 2 - y) ] 1/2 in pandas vektorisiert Operationen, Sie haben:

df['distance'] = (df.lat.sub(11.344).pow(2).add(df.long.sub(7.234).pow(2))).pow(.5)   
df 

     lat long distance 
id       
1 12.654 15.50 8.369161 
2 14.364 25.51 18.523838 
3 17.636 32.53 26.066777 
5 12.334 25.84 18.632320 
9 32.224 15.74 22.546096 

Alternativ mit arithmetischen Operatoren:

(((df.lat - 11.344) ** 2) + (df.long - 7.234) ** 2) ** .5 
Verwandte Themen