考虑以下Pandas数据框架:
print(df)
Id X Y Type X of Closest Y of Closest
0 201 73.91 34.84 A NaN NaN
1 201 74.67 32.64 A NaN NaN
2 201 74.00 33.20 A NaN NaN
3 201 71.46 27.70 A NaN NaN
4 201 69.32 35.42 A NaN NaN
5 201 75.06 24.00 B NaN NaN
6 201 74.11 16.64 B NaN NaN
7 201 73.37 18.73 B NaN NaN
8 201 56.63 26.90 B NaN NaN
9 201 73.35 38.83 B NaN NaN
10 512 74.15 28.90 A NaN NaN
11 512 75.82 17.56 A NaN NaN
12 512 74.78 33.21 A NaN NaN
13 512 75.43 32.41 A NaN NaN
14 512 75.90 25.12 A NaN NaN
15 512 79.76 29.49 B NaN NaN
16 512 76.47 36.91 B NaN NaN
17 512 74.70 19.19 B NaN NaN
18 512 78.75 30.53 B NaN NaN
19 512 74.60 31.88 B NaN NaN
注意,对于每个 Id,总是有 10 行数据,其中 5 行为 A 类型,5 行为 B 类型。
我想创建两列,'X of Closest' 和 'Y of Closest'。我的意思是,每个 Id 对应的相反类型的 X、Y 坐标对,其欧几里得距离最短。
第一行的示例:距离 (73.91, 34.84) 最近的 B 类型坐标对为 (73.35,38.83),它们之间的欧几里得距离为 4.03。
一种(可能!?)方法是构建 10 列,计算每个 Id 中点之间的欧几里得距离,然后从相反类型中选择最小欧几里得距离。不过,我相信肯定还有更快速的方法。