我有一个数据框,它有三列。一列包含x坐标,另一列包含y坐标。此外,如您所见,还有一个“trackid”列——该列将所有x和y坐标与特定的、唯一的trackid相关联
trackiD X_COORDINATES Y_COORDINATES
2 542.299805 23.388090
2 544.108215 23.575758
2 545.300598 23.962421
2 546.417053 25.049328
2 546.198669 24.830357
2 546.724915 24.916084
2 547.037048 24.918982
2 547.011963 24.785202
2 547.649231 24.845772
3 547.600525 24.613401
3 547.891479 24.268734
3 548.580505 24.459103
3 548.144409 23.915531
3 548.626770 23.922005
4 548.527222 24.134670
4 548.504211 23.642254
4 548.936584 24.028818
4 548.627869 23.295454
我想做的是:
这是我当前的代码——它运行,但问题是,它输出的列表中只有一个较大的可能不正确的值(如下所示)。此外,在stackoverflow上,“value”变量似乎已被截断并跨多行显示,但我在jupyter笔记本中运行它时并非如此
def pythag_dis(U_id):
c = data.Unique_id == U_id
df = data[c]
df.reset_index(inplace = True)
k = sorted(df.trackId.unique())
i = 0
j = 1
length = len(k)
while i < length:
condition = df.trackId == k[i]
df2 = df[condition]
df2.reset_index(inplace = True)
value =
math.sqrt((df.Object_Center_0.iloc[j] -
df.Object_Center_0.iloc[i])**2 +
(df.Object_Center_1.iloc[j] -
df.Object_Center_1.iloc[i])**2)
mylist = []
mylist.append(value)
fulldistance = sum(mylist)
mylist2 = []
mylist2.append(fulldistance)
i+=1
return mylist2
pythag_dis('1CCM0701')
OUTPUT: [1976.075585650214]
首先创建两个新列
X_SHIFTED
和Y_SHIFTED
,它们代表每个轨迹ID的下一点坐标。我们通过组合df.groupby
和df.shift
来实现这一点:然后,简单地使用点(
X_COORDINATES
,Y_COORDINATES
)和(X_SHIFTED
,Y_SHIFTED
)之间的欧几里德距离公式。我们可以使用df.apply
行方式(axis=1
)以及math.dist
来实现这一点:输出:
要获取每条轨迹的距离总和,可以使用:
输出:
使用Pandas的一种可能解决方案:我使用Pandas groupby shift匹配坐标,计算距离,然后对组中的距离求和:
输出:
测试数据帧:
相关问题 更多 >
编程相关推荐