我有以下 Dataframe
region country val_a val_b
reg1 cntr1 0.5 0.7
reg2 cntr1 1 2
reg3 cntr1 2 1.2
reg1 cntr2 3 0.3
reg44 cntr2 0.2 0.7
我想循环遍历这个数据框,将每一行与其他行进行比较,找出每一对行的val_a
和val_b
之间的欧氏距离,并创建以下数据框
source_region source_country dest_region dest_country distance
reg1 cntr1 reg2 cntr1 0.9
reg1 cntr1 reg3 cntr1 1.5
...
我可以做一个嵌套循环来创建这样的东西,但有没有一个更Python的方法来完成它?请注意,在本例中,distance
列值是随机的。你可以使用任何你喜欢的公式来计算欧几里德距离,我只是想让成对比较的逻辑正确。
1条答案
按热度按时间toiithl61#
您可以使用itertools中的组合。这可以产生行索引的所有组合的列表,其然后可以用于形成新的数据框。显然,以下代码中的距离计算仅是说明性的。代码是分步骤完成的,因此如果需要,您可以查看中间层。
其给出:
这假设源A,dest B与源B,dest A相同,因为两个距离将相同。如果你想拥有每一个源和每一个目的地,那么使用
permutations
而不是combinations
。