2017-05-29 148 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”形成一个单独的轨迹上的点;因此它可以(vid)= 1的行(0-2)是一个轨迹,而属于vid = 2的点是另一个轨迹,依此类推。

上述数据也可以转换为下面的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) ] 

我想在DF创建方式循环,可能与VID GROUPBY他们,并得到所有的坐标项目,找到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

编辑答案,请再试一次。 –