2017-05-29 6 views
0

Ich habe eine Python-Funktion, die auf die Reihenfolge der Koordinaten (Trajektdaten) funktioniert. Es erfordert, dass Daten in dem folgenden Format vorliegen.Wie über Pandas Dataframe Schleife?

#items = [Item(x1, y1), Item(x2, y2), Item(x3, y3), Item(x4, y4)] 
items = [Item(0.5, 0.5), Item(-0.5, 0.5), Item(-0.5, -0.5), Item(0.5, -0.5)] 

Es wird auch als unten für eine Begrenzungsrahmen zu finden, die xmin, ymin, xmax, ymax aus dem oben Artikel und gibt ihm erforderlich ist.

spindex = pyqtree.Index(bbox=[-1, -1, 1, 1]) 
         #bbox = [xmin,ymin,xmax,ymax] 

Jetzt werden die Elemente wie folgt eingefügt.

#Inserting items 
for item in items: 
    spindex.insert(item, item.bbox) 

Da wir nun alle oben genannten Operationen sehen können, sind auf einer einzigen Folge von Koordinaten in Artikel angegeben durchgeführt. Ich muss die obigen Schritte an einem Datenrahmen mit mehreren Trajektorien durchführen, die jeweils mehrere Punktefolgen haben und durch eine ID vid identifiziert werden.

Die Probe df ist wie folgt:

vid  x   y 
0 1   2   3 
1 1   3   4 
2 1   5   6 
3 2   7   8 
4 2   9  10 
5 3   11  12 
6 3   13  14 
7 3   15  16 
8 3   17  18 

In der obigen Datenrahmen, x, y die Koordinatendaten und alle zugehörigen Punkte derselben „vid“ bildet eine getrennte Bahn; so kann es beachte Zeilen (0-2), die zur Reise-ID (vid) gehören = 1 ist eine Flugbahn, während Punkte, die zu vid = 2 gehören, eine andere Flugbahn usw.

Die oben genannten Daten können wie die folgenden df auch transformiert werden (nur wenn erforderlich):

vid  (x,y) 
0 1   [ (2,3),(3,4), (5,6) ] 
1 2   [ (7,8),(9,10) ] 
2 3   [ (11,12),(13,14),(15,16),(17,18) ] 

Ich möchte einen Weg, um eine Schleife über die df erstellen und sie vielleicht GROUPBY mit vid und erhalten Sie alle Koordinaten als Artikel und finden xmin, xmax, ymin, ymax und sie einsetzen, wie für jeden der oben gezeigten Trajektorien in der df.

Ich habe einen Code so etwas, aber es funktioniert nicht funktioniert

for group in df.groupby('vid'): 
bbox = [ group['x'].min(), group['y'].min(), group['x'].max(), group['y'].max() ] 
spindex.insert(group['vid'][0], bbox) 

Bitte um Hilfe.

+0

@jezrael Können Sie mir freundlicherweise hier bei diesem Problem helfen bitte. – Liza

+0

@piRSquared Bitte helfen Sie mir hier. Ich habe auch die detaillierte Frage gebucht, falls erforderlich: https://stackoverflow.com/questions/44232622/how-to-perform-quadtree-operation-on-pandas-data-frame – Liza

Antwort

1

Gourpby return ((gkeys), grouped_dataframe)
Ändern Sie bitte Ihre Codes auf folgende:

for g in df.groupby('vid'): 
    vid = g[0] 
    g_df = g[1] 
    bbox = [ g_df['x'].min(), g_df['y'].min(), g_df['x'].max(), g_df['y'].max() ] 
    spindex.insert(vid, bbox) 
+0

Vielen Dank. Aber ich bekomme einen NameError, dass der Name "g" nicht definiert ist. Wenn ich also vorher g = [] definiere, bekomme ich IndexError und listet den Index außerhalb des Bereichs auf. – Liza

+0

Bearbeitete die Antwort, bitte versuchen Sie es erneut. –