如何在pandas数据帧中的一组行上执行函数?

时间:2017-04-28 05:35:02

标签: python pandas dataframe

我正在尝试实施algorithm。让我们说算法作为函数" xyz"

执行

该功能专门设计用于对轨迹数据进行操作,即(x,y)坐标。

该函数有两个参数:

第一个参数是(x,y)点元组列表

,第二个是常数值。

可以说明如下:

 line = [(0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,1),(0,0)]
 xyz(line, 5.0) #calling the function

输出:

 [(0, 0), (2, 0), (2, 2), (0, 2), (0, 0)]

只有一行时可以轻松实现。但是我有一个庞大的数据框如下:

     id      x     y    x,y
  0  1       0     0    (0,0)
  1  1       1     0    (1,0)
  2  1       2     0    (2,0)
  3  1       2     1    (2,1)
  4  1       2     2    (2,2)
  5  1       1     2    (1,2)
  6  2       1     3    (1,3)
  7  2       1     4    (1,4)
  8  2       2     3    (2,3)
  9  2       1     2    (1,2)
 10  3       2     5    (2,5)
 11  3       3     3    (3,3)
 12  3       1     9    (1,9)
 13  3       4     6    (4,6)

在上面的数据框中,相同" id" 的行形成一个单独轨迹/线的点。我想为这些行中的每一行实现上述功能。

我们可以从df观察到有3种不同的轨迹,其中id为1,2,3。轨迹1的x,y值在行(0-5)中,轨迹2的点在行(6-9)中等等。

如何实现功能" xyz"对于这些行中的每一行,并且由于此函数的输出再次是x,y坐标的元组列表,如何存储此列表?注意:输出列表可以包含任意随机数的元组。

1 个答案:

答案 0 :(得分:4)

我认为groupby需要print (df.groupby('id')['x,y'].apply(lambda x: xyz(x, 5.0)))

print (df.groupby('id')['x,y'].apply(xyz, 5.0))

或者:

tolist

包含apply功能的示例 - 必须添加KeyError: -1,否则获取print (df.groupby('id')['x,y'].apply(lambda x: rdp(x.tolist(), 5.0))) #alternative with list #print (df.groupby('id')['x,y'].apply(lambda x: rdp(list(x), 5.0)) id 1 [(0, 0), (1, 2)] 2 [(1, 3), (1, 2)] 3 [(2, 5), (4, 6)] Name: x,y, dtype: object

struct Foo {
    std::shared_ptr<Foo> m_foo;
}

std::shared_ptr<Foo> foo1 = std::make_shared<Foo>();
std::shared_ptr<Foo> foo2 = std::make_shared<Foo>();

foo1.m_foo = foo2;
foo2.m_foo = foo1;