Я новичок в python и его библиотеках. Перерыл все форумы, но подходящего решения не нашел. Это первый раз, когда я публикую вопрос здесь. Извините, если я сделал что-то не так.
Итак, у меня есть два кадра данных, как показано ниже, содержащие координаты X Y Z (UTM) и другие функции.
In [2]: a = {
...: 'X': [1, 2, 5, 7, 10, 5, 2, 3, 24, 21],
...: 'Y': [3, 4, 8, 15, 20, 12, 23, 22, 14, 7],
...: 'Z': [12, 4, 9, 16, 13, 1, 8, 17, 11, 19],
...: }
...:
In [3]: b = {
...: 'X': [1, 8, 20, 7, 32],
...: 'Y': [6, 4, 17, 45, 32],
...: 'Z': [52, 12, 6, 8, 31],
...: }
In [4]: df1 = pd.DataFrame(data=a)
In [5]: df2 = pd.DataFrame(data=b)
In [6]: print(df1)
X Y Z
0 1 3 12
1 2 4 4
2 5 8 9
3 7 15 16
4 10 20 13
5 5 12 1
6 2 23 8
7 3 22 17
8 24 14 11
9 21 7 19
In [7]: print(df2)
X Y Z
0 1 6 52
1 8 4 12
2 20 17 6
3 7 45 8
4 32 32 31
Мне нужно найти ближайшую точку (расстояние) в df1 до каждой точки df2 и создать новый DataFrame.
Поэтому я написал приведенный ниже код и фактически нашел ближайшую точку (расстояние) до df2.iloc[0].
In [8]: x = (
...: np.sqrt(
...: ((df1['X'].sub(df2["X"].iloc[0]))**2)
...: .add(((df1['Y'].sub(df2["Y"].iloc[0]))**2))
...: .add(((df1['Z'].sub(df2["Z"].iloc[0]))**2))
...: )
...: ).idxmin()
In [9]: x1 = df1.iloc[[x]]
In[10]: print(x1)
X Y Z
3 7 15 16
Итак, я думаю, мне нужен цикл для перебора df2 и применения приведенного выше кода к каждой строке. В результате мне нужен новый обновленный df1, содержащий все ближайшие точки к каждой точке df2. Но не успел. Пожалуйста, порекомендуйте.