我有一個下面的函數來計算一個值兩個參數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