2017-05-25 13 views
0

Ich habe einen Pandas-Datenframe, über den ich gerne iterieren würde. Zum Beispiel kann eine vereinfachte Version meines Datenrahmen sein:LineString für eindeutige Werte in Pandas DataFrame erstellen

abc begin end ID  Lat  Long 
def1 001 123 CAT 13.167 52.411 
def2 002 129 DOG 13.685 52.532 
def3 003 145 MOOSE 13.698 52.131 
def1 004 355 CAT 13.220 52.064 
def2 005 361 CAT 13.304 52.121 
def3 006 399 DOG 12.020 52.277 
def1 007 411 MOOSE 13.699 52.549 
def2 008 470 MOOSE 11.011 52.723 

Ich möchte über jede eindeutige ID iterieren und erstellen Sie ein (wohlgeformt) aus den passenden Breite/Länge Spalten Linestring.

grp = df.groupby('ID') 
for x in grp.groups.items(): 
# this is where I need the most help 

Für das obige Beispiel möchte ich drei Iterationen mit 3 LineStrings erhalten, die in ein einzelnes Wörterbuch zurückversetzt werden.

{'CAT':LINESTRING (13.167 52.411, 13.22 52.064, 13.304 52.121), 'DOG':LINESTRING (13.685 52.532, 12.02 52.277), 'MOOSE':LINESTRING (13.698 52.131, 12.699 52.549, 13.011 52.723)} 

Antwort

1

Ich habe nicht das LINESTRING-Paket installiert, aber ich denke, Sie können einfach konvertieren, was in d in das Format ist, das Sie benötigen.

d = {} 
df.groupby('ID').apply(lambda x: d.update({x.ID.iloc[0]:x[['Lat','Long']].values.tolist()})) 

{'CAT': [[13.167, 52.411], [13.22, 52.064], [13.304, 52.121]], 
'DOG': [[13.685, 52.532], [12.02, 52.277]], 
'MOOSE': [[13.698, 52.131], [13.699, 52.549], [11.011, 52.723]]} 
+0

Danke für das Posten der Antwort. Das Einzige, was ich ändern musste, war, anstelle von "d.uptate" habe ich "d.append" benutzt. – David

+0

Dies war aufgrund der Tatsache, dass in Ihrer Antwort d war eine Liste, kein Diktat. Gleiche Idee. Danke nochmal für die Antwort. – David

+1

Keine Sorgen. Das ist ein Tippfehler und ich habe die Antwort aktualisiert. – Allen

Verwandte Themen