【发布时间】:2020-10-10 10:28:34
【问题描述】:
我是 python 及其库的新手。搜索了所有论坛,但找不到合适的解决方案。这是第一次在这里发布问题。对不起,如果我做错了什么。
所以,我有两个如下所示的 DataFrame,其中包含 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 的每个点的所有最近点。但是来不及了。请指教。
【问题讨论】:
标签: python pandas dataframe distance nearest-neighbor