Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dataframe中的一组行上执行函数?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何在dataframe中的一组行上执行函数?

Python 如何在dataframe中的一组行上执行函数?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在努力实现一个新的目标。假设算法作为函数“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 id x y x,y 0 1 0 0

我正在努力实现一个新的目标。假设算法作为函数“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
     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)
输出:

 [(0, 0), (2, 0), (2, 2), (0, 2), (0, 0)]
当只有一行时,这很容易实现。但我有一个巨大的数据框架,如下所示:

 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
     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坐标的元组列表,因此如何存储该列表?注意:输出列表可以包含任意数量的元组。

我认为您需要
groupby
和:

或:

带函数的示例-需要添加
tolist
,否则获取
键错误:-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

如何将此groupby对象转换为数据帧,以便新数据帧有一列表示id(包含值1,2,3),另一列表示从groupby结果中获得的相应坐标。添加
reset_index()
like
df1=df.groupby('id')['x,y'])。应用(lambda x:rdp(x.tolist(),5.0))。reset_index()
非常感谢,这很有效。但是我想请你再次检查这个问题,我已经增加了更多的要求。是的,我会的。