Python 查找数据帧中数值最接近的行
我有一个包含以下假设数据的熊猫数据框架:Python 查找数据帧中数值最接近的行,python,pandas,dataframe,Python,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
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。
理想情况下,最后我希望有一个名为“最近的_ID”的新列,其中包含数据帧中最接近的ID
我很难想出这个函数
我真的很感激任何能给我指明正确方向的帮助或暗示
非常感谢 让我们将
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)
然后,您可以将最后两个结果存储在两列中,或者以某种方式决定哪一个更接近
注意:此代码尚未检查,可能有一些错误…如何定义最近距离?我认为问题没有很好地定义-假设ID2在时间上最接近ID1,但ID3在空间上最接近。哪一个应该在最近的_ID列上?请提供预期的输出时间应该具有最高优先级,然后“按XY排序”。我可能需要先对数据进行标准化,这样我就可以用百分比计算距离了……它并没有按原样运行,但它为我指明了正确的方向,谢谢!一旦我弄明白了,我会更新的!