在Pandas DataFrame中查找数值上最接近的行

时间:2020-01-28 15:21:33

标签: python pandas dataframe

我有一个带有以下假设数据的Pandas DataFrame:

   ID    Time        X-coord      Y-coord
0  1      5          68          5
1  2      8          72          78 
2  3      1          15          23 
3  4      4          81          59 
4  5      9          78          99 
5  6     12          55          12 
6  7      5          85          14 
7  8      7          58          17 
8  9     13          91          47 
9  10    10          29          87 

对于每一行(或ID),我想在此数据帧中找到时间和空间(X和Y)中最接近的ID。奖励:时间应优先于XY。 理想情况下,最后我想创建一个名为“ Closest_ID”的新列,其中包含数据帧中最接近的ID。

我很难为此提供一个功能。

如果能为我指明正确的方向,我将不胜感激!

非常感谢!

1 个答案:

答案 0 :(得分:1)

让我们将df表示为我们的数据框。然后您可以执行以下操作:

from sklearn.metrics import pairwise_distances

space_vals = df[['X-coord', 'Y-coord']]
time_vals =df['Time']
space_distance = pairwise_distance(space_vals)
time_distance = pairwise_distance(time_vals)

space_distance[space_distance == 0] = 1e9 # arbitrary large number
time_distance[time_distance == 0] = 1e9 # again

closest_space_id = np.argmin(space_distance, axis=0)
closest_time_id = np.argmin(time_distance, axis=0)

然后,您可以将最后2个结果存储在2列中,或者以某种方式确定哪个更接近。

注意:此代码尚未检查,可能存在一些错误...