【发布时间】:2021-09-30 00:40:54
【问题描述】:
我有一个包含三列的数据框。一列包含 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
我想要做的是:
- 获取每对 x 和 y 坐标,并使用毕达哥拉斯距离公式计算它们之间的距离增量: (sqrt(x2-x1)^2 + (y2-y1)^2),将每个距离增量添加到列表中,然后取列表中所有增量的总和以获得总行驶距离——同样需要注意的是,我只对唯一 trackid 中的每组坐标进行此计算。 IE。计算 trackid 2 的距离增量总和,然后分别对 trackid 3 和 4 执行相同的过程,依此类推 - 最终将每个唯一轨道 ID 的所有总行驶距离存储在一个新列表中。
这是我当前的代码——它可以运行,但问题是,它输出一个列表,其中只有一个大的、可能不正确的值(如下所示) . 'value'变量似乎已被切断并在stackoverflow上跨多行显示,但当我在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]
【问题讨论】:
-
您显示的代码无法运行,因为它有错误的缩进。
-
你打算用
mylist2 = []这一行来实现什么? -
@mkrieger1 对此感到抱歉 - 只是试图修复它。当我粘贴到 stackoverflow 时,格式被丢弃了。
-
@mkrieger1 所以对于 mylist 我必须存储所有距离增量值,然后将所有这些值相加以计算总距离。然后想法是将总距离值存储在一个新列表中——mylist2
-
@mkrieger1 啊——我在考虑回答这个问题时发现我的代码中有错误。我实际上不希望每次代码循环时都创建一个列表,每个列表应该只存在一次,因此我应该在循环之外定义空列表。