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

当只有一行时,可以很容易地实现这一点.但是我有一个巨大的 dataframe 架,如下所示:

     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)

在上述 dataframe 中,具有相同“ id”的行形成一条单独的轨迹/线的点.我想为每行实现上述功能.

我们可以从df中观察到3条ID为1,2,3的不同轨迹.轨迹1在行(0-5)中具有其x,y值,轨迹2在行(6-9)中具有其点,依此类推.

如何为每行实现函数“ xyz”,并且由于该函数的输出又是x,y坐标的元组列表,因此如何存储此列表?注意:输出列表可以包含任意数量的元组.

最佳答案

我认为您需要使用apply的groupby:

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

要么:

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

具有rdp函数的示例-必须添加到列表中,否则会得到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