【问题标题】:Looping over a python list of tuples and applying a function循环遍历元组的python列表并应用函数
【发布时间】:2017-11-06 17:20:47
【问题描述】:

我有一个这种格式的数据框:

  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

【问题讨论】:

    标签: python function pandas numpy dataframe


    【解决方案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 调用将其转换为新的数据框。

    这会让你感动吗?

    【讨论】:

    • 这是完美的。我使用了“for pair in pairets:” 另外你能告诉我如何将输出转换为 df 吗?
    • 对。原始代码中的一个问题是,一旦进入循环,您就会完全忽略 pair
    • 我必须查看数据帧转换,尽管我知道这很容易。我对数据帧使用内部包,而不是 PANDAS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2019-04-15
    相关资源
    最近更新 更多