【问题标题】:how to loop over pandas dataframe?如何循环熊猫数据框?
【发布时间】:2017-10-29 06:28:37
【问题描述】:

我有一个适用于坐标序列(轨迹数据)的 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)]

还需要从上面的items中找到xmin、ymin、xmax、ymax,并将其指定为如下的bounding box。

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

现在,项目插入如下。

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

我们现在可以看到,上述所有操作都是在 items 中指定的单个坐标序列上执行的。我需要在具有多个轨迹的数据帧上执行上述步骤,每个轨迹都有多个点序列并由 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”的所有点形成一个单独的轨迹;所以可以观察到属于voyage id (vid)的rows(0-2) = 1 是一个轨迹,而属于 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 对它们进行分组,并将所有坐标作为 items 并找到 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)

请帮忙。

【问题讨论】:

标签: python loops pandas numpy dataframe


【解决方案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)

【讨论】:

  • 谢谢。但是我得到一个 NameError 没有定义名称“g”,所以如果我之前定义 g = [ ],我会得到和 IndexError,列出索引超出范围。
  • 已编辑答案,请重试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2018-08-10
相关资源
最近更新 更多