我有这种格式的数据框:
vid points
0 1 [[0,1], [0,2, [0,3]]
1 2 [[1,2], [1,4], [1,9], [1,7]]
2 3 [[2,1], [2,3], [2,8]]
3 4 [[3,2], [3,4], [3,5],[3,6]]
每一行都是轨迹数据,我必须找到一个带有函数func_dist
的轨迹之间的距离,如下所示:
x = df.iloc[0]["points"].tolist()
y = df.iloc[3]["points"].tolist()
func_dist(x, y)
我有一份感兴趣的轨迹索引列表l
。
l = [0,1,3]
我必须找到所有可能的轨迹对之间的距离;在上面的例子中,这是0-1,0-3和1-3。我知道如何使用
生成对列表 pairsets = list(itertools.combinations(l, 2))
返回
[(0,1), (0,3), (1,3)]
由于列表可能包含100多个索引,因此我尝试自动执行此过程并将每对中计算的距离存储在new_df
数据框中。
我尝试了以下代码进行距离计算:
for pair in pairsets:
a, b = [m[0] for m in pairssets], [n[1] for n in pairsets]
for i in a:
x = df.iloc[i]["points"].tolist()
for j in b:
y = df.iloc[j]["points"].tolist()
dist = func_dist(x, y)
但它只计算最后一对,1-3。如何计算所有对并创建这样的新数据框:
traj1 traj2 distance
0 1 some_val
0 3 some_val
1 3 some_val
答案 0 :(得分:1)
这只是正确处理您的指数的问题。 对于每对,您可以获取两个索引,分配数据集并计算距离。
dist_table = []
for pair in pairsets:
i, j = pair
x = df.iloc[i]["points"].tolist()
y = df.iloc[j]["points"].tolist()
dist = func_dist(x, y)
dist_table.append( [i, j, dist] )
您可以合并前两行:
for i, j in pairsets:
dist_table
为您提供了一个2D列表,您应该能够通过简单的PANDAS调用将其转换为新的数据框。
这会让你感动吗?