在python元组列表上循环并应用函数

在python元组列表上循环并应用函数,python,function,pandas,numpy,dataframe,Python,Function,Pandas,Numpy,Dataframe,我有一个以下格式的数据框: 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

我有一个以下格式的数据框:

  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)
  traj1       traj2       distance
  0           1           some_val
  0           3           some_val
  1           3           some_val
我有一个感兴趣的轨迹索引列表

l = [0,1,3]
我必须找到所有可能的轨迹对之间的距离;在上述情况下,这是0-1、0-3和1-3。我知道如何使用

 pairsets = list(itertools.combinations(l, 2)) 
返回

 [(0,1), (0,3), (1,3)]
由于该列表可能有100多个索引,我正在尝试将此过程自动化,并将计算出的每对之间的距离存储在新的_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。如何计算所有对并创建新的数据帧,如下所示:

 x = df.iloc[0]["points"].tolist() 
 y = df.iloc[3]["points"].tolist()
 func_dist(x, y)
  traj1       traj2       distance
  0           1           some_val
  0           3           some_val
  1           3           some_val

这只是正确处理索引的问题。 对于每一对,您获取两个索引,分配数据集,并计算距离

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_表提供了一个2D列表,您应该能够通过一个简单的调用将其转换为新的数据帧


这能让你动起来吗?

这太完美了。我用成对:你能告诉我如何将输出转换成df吗?好的。原始代码中的一个问题是,一旦进入循环,就完全忽略了pair。我必须查找数据帧转换,尽管我知道这很容易。我对数据帧使用内部包,而不是熊猫。