2017-05-29 11 views
0

私は座標のシーケンス(軌道データ)で動作するpython関数を持っています。データには次の形式が必要です。パンダのデータフレームをループする方法は?

#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)] 

また、上記アイテムからXMIN、YMIN、XMAX、YMAXを見つけて、以下のようにバウンディングボックスのためにそれを指定する必要があります。

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

ここでは、以下のように項目を挿入します。

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

我々は今、すべての上記の操作のために見ることができるように

項目で指定された座標の単一のシーケンスで実行されています。私は複数の軌跡を持つデータフレーム上で上記のステップを実行する必要があり、それぞれが複数の点列を持ち、id vidで識別されます。

次のようにサンプルのDFである:

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 

上記データ・フレームでは、x、yの座標データと同じ「VID」に属する全ての点が1つの別個の軌道を形成している。ので、缶点= 2が別の軌道であるというようにVIDに属するながら航海ID(VID)= 1に属する観察された行(0-2)は、1つの軌道である。

上記データがあまりにもdfを以下のように変形することができます(必要な場合のみ):

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) ] 

vidでdfとそれらをグループ化する方法を作成し、すべての座標をの項目とし、xmin、xmax、ymin、ymaxを見つけ出し、それぞれのdfの軌道。

助けてください私はこのようなコードの何かを持っているが、それは

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) 

に動作しません。

+0

@jezraelあなたは親切にこの問題にここに私を助けてくださいすることができます。こんにちは、私をここで助けてください。 – Liza

+0

@ piRSquaredまた、必要に応じて詳細な質問を投稿しました。https://stackoverflow.com/questions/44232622/how-to-perform-quadtree-operation-on-pandas-data-frame – Liza

答えて

1

Gourpbyリターン((gkeys)、grouped_dataframe)
を次のようにあなたのコードを変更します。

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

ありがとうございます。しかし、私は "g"という名前が定義されていないNameErrorを取得しています。したがって、前にg = []を定義していれば、IndexErrorを取得し、リストのインデックスを範囲外にします。 – Liza

+0

答えを編集しました。もう一度お試しください。 –

関連する問題