我有一个下面的函数来计算一个值两个参数X,Y:应用功能的数据帧列
import numpy as np
import math
def some_func(pt1,pt2):
return math.sqrt((pt2[0]-pt1[0])*(pt2[0]-pt1[0]) + (pt2[1]-pt1[1])*(pt2[1]-pt1[1]))
用法:
a = 1, 2
b = 4, 5
some_func(a,b)
#outputs = 4.24264
#or some_func((1,2), (4,5)) would give the same output too
我有以下DF:
seq x y points
1 2 3 (2,3)
1 10 5 (10,5)
1 6 7 (6,7)
2 8 9 (8,9)
2 10 11 (10,11)
列“点数”是使用下面的一段代码获得的:
df["points"] = list(zip(df.loc[:, "x"], df.loc[:, "y"]))
我想申请的some_func功能对整个DF,还通过 “序列”
我试图将它们分组:
df["value"] = some_func(df["points"].values, df["points"].shift(1).values)
#without using groupby
和
df["value"] = df.groupby("seq").points.apply(some_func) #with groupby
但两者的他们显示TypeError说1缺少参数或不支持的数据类型。
预计DF
seq x y points value
1 2 3 (2,3) NaN
1 10 5 (10,5) 8.24
1 6 7 (6,7) 4.47
2 8 9 (8,9) NaN
2 10 11 (10,11) 2.82
我不知道你为什么导入numpy的,然后你不使用它。我想你可以通过将你的2d点存储在np.arrays而不是元组中并且将距离计算为np.linalg.norm(pt1-pt2)来改善你的代码。 – Anon