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。
我无法为此提出一个功能。
我真的很感激任何帮助或提示我正确的方向!
非常感谢!
解决方案
让我们表示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 列中,或者以某种方式确定哪个更接近。
注意:此代码未经检查,可能有一些错误...
推荐阅读
- php - PHP Array 返回和使用
- liquibase - Liquibase 日志级别问题和许可证错误
- c# - ASP.NET Core MVC - 使用 Microsoft Authenticator 的多因素推送身份验证
- android - 由于反应本机邮件,Gradle 构建失败
- amazon-web-services - Cloudformation 应用程序负载均衡器弹性 IP 错误
- xml - 运行 testng.xml 以触发 testng 时会发生什么?
- apache-spark - Spark s3数据框选择失败:ConnectionClosedException内容长度过早结束
- vb.net - 我想将我的 AutoCAD 图层过滤器导出到另一个图形
- django - 在 Django 模板上显示上传的 csv 文件
- parsing - 无法使用格式 [strict_date_optional_time||epoch_millis] 解析 Logstash 中的日期