首页 > 解决方案 > 通过坐标接近度对 Pandas DataFrame 进行排序

问题描述

我正在使用包含与特定x-y坐标关联的多个字段的数据集。数据框有 和 列df['x']df['y']表示每一行的坐标对。我希望按欧几里德距离对数据框进行排序,以便我知道相邻的行是最接近的(我希望有多行与给定的行具有相同的距离)。

我该怎么做呢?

澄清 如果排序数据帧中的第一行是原始数据帧中的随机行,则排序数组中的第二行应该是与第一行欧几里得距离最小的元素,第三行应该是欧几里得最小的元素到前一行的距离等。

可能相关或不相关的额外上下文 我要解决的真正问题是我丢失了数据。我的想法是在邻居的给定行中插入缺失值,但这需要这种排序。为此,我只是使用 Pandas 的 interpolate() 函数。

标签: pythonpandas

解决方案


您可以将函数应用于返回距离的每一行,然后按该距离排序。(我在下面的示例中使用了一个用于欧几里得距离的 numpy 函数)

df['dist'] = df[['x', 'y']].apply(lambda row: np.linalg.norm((row.x, row.y)), axis=1)
df.sort_values('dist', ignore_index=True, inplace=True)

推荐阅读