【发布时间】:2021-01-08 20:07:36
【问题描述】:
我有一个 Pandas DataFrame,其中列 X1, Y1 具有第一组坐标的点坐标,列 X2, Y2 具有第二组坐标的点坐标坐标。两组相互独立。只是碰巧它们在同一个数据框中。示例:
X1,Y1,X2,Y2
41246.438,0.49,38791.673,0.49
41304.5,0.491,38921.557,0.491
41392.062,0.492,39037.135,0.492
41515.5,0.493,39199.972,0.493
41636.062,0.494,39346.561,0.494
41795.188,0.495,39477.63,0.495
42027.75,0.496,39576.275,0.496
42252.25,0.497,39732.102,0.497
42486.812,0.498,39833.753,0.498
42739.062,0.499,39949.13,0.499
43012.125,0.5,40135.42,0.5
43472.75,0.5,40292.017,0.5
43909.562,0.501,40479.452,0.501
44312.625,0.502,40725.329,0.502
44799.938,0.503,40950.05,0.503
45294.938,0.504,41214.136,0.504
45729.625,0.505,41514.213,0.505
45942.438,0.506,41943.208,0.506
46067.688,0.507,42296.643,0.507
46215,0.508,42653.477,0.508
46336.75,0.509,43138.834,0.509
46476.562,0.51,43557.815,0.51
46584.25,0.511,43966.564,0.511
46654.75,0.512,44166.996,0.512
46707.75,0.513,44310.557,0.513
46774.188,0.514,44410.069,0.514
46832.062,0.515,44518.045,0.515
46905.062,0.516,44608.646,0.516
46976.562,0.517,44678.073,0.517
47077.938,0.518,44727.393,0.518
47215.688,0.519,44786.498,0.519
47290.625,0.52,44845.867,0.52
47351.5,0.521,44915.072,0.521
对于列 X1, Y1 中的每个点,我需要在列 X2, Y2 中找到一个点,使得这两个点之间的欧几里得距离最短。
作为结果,我需要将 X2, Y2 列中找到的点与 X1, Y1 中的对应点放在同一行。此外,我需要将另一列 D 中计算的最短欧几里得距离增加到同一行。然后对列 X1, Y1 中的每个点重复此过程。
这样做的一种方法是迭代列 X1、Y1 中的行,并为每一行找到列 X2、Y2 中的最短欧几里得距离。在不编写 for 循环的情况下,可能有更好的方法。
【问题讨论】:
-
描述听起来像是一项任务...您应该至少尝试一下!
-
如果您可以将答案标记为正确,这样访问者就会看到它正在工作,那就太好了。如果您仍需要一些说明,请随时提出。
-
@JHBonarius。我在下面发布了我的解决方案。这不是一个任务。我只需要展示一种分布与另一种分布的接近或不同。
-
@Stas Buzuluk。到目前为止有 3 种解决方案,而且似乎都是正确的。所以我不知道该标记哪一个。
-
@Dimon 标记答案是其他人需要的,这样他们才能首先找到最有帮助的答案,并确保它是正确的,您通常希望对您提出的每个问题都这样做。所以选择最有帮助的。您也可以标记您的答案以获得一些声誉,这完全可以,特别是如果您可以使用其他答案中的信息。
标签: python pandas numpy scipy euclidean-distance