【发布时间】:2017-06-28 06:19:16
【问题描述】:
我有以下函数来计算两个参数 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"]))
我想在整个 df 上应用 some_func 函数,也可以通过“seq”对它们进行分组
我试过了:
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 然后你不使用它。我想您可以通过将二维点存储在 np.arrays 而不是元组中来改进代码,并将距离计算为 np.linalg.norm(pt1 - pt2)。
标签: python pandas numpy dataframe