python - 两个数据帧中点之间的距离
问题描述
我是 python 新手,我尝试搜索但找不到解决方案。
我有两个带有笛卡尔坐标的数据框。
node x y value
abc 645 714 8
def 187 754 11
location x y value
ijk 621 744 1
lmn 202 720 -5
我想找到 df2 中每个位置与 df1 中的节点的最小距离,并更新 df1 中的“值”。
我已经看到 cdist 来计算最小距离,但是如何将其链接回对应的?节点
由于ijk接近abc,lmn接近def,所以最终答案应该是
node x y value
abc 645 714 9
def 187 754 6
解决方案
这是一种从头开始的方法:
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'node': ['abc', 'def'],
'x': [645, 187],
'y': [714, 754],
'value': [8, 11]})
df2 = pd.DataFrame({'location': ['ijk', 'lmn'],
'x': [621, 202],
'y': [744, 720],
'value': [1, -5]})
# compute Euclidean distances (using Pythagoras' theorem)
df2['distances'] = [[((df1['x'][j] - df2['x'][i]) ** 2
+ (df1['y'][j] - df2['y'][i]) ** 2) ** 0.5
for j in range(len(df1))]
for i in range(len(df2))]
df2
location x y value distances
0 ijk 621 744 1 [38.41874542459709, 434.11519208615584]
1 lmn 202 720 -5 [443.0406301909566, 37.16180835212409]
df1['new_value'] = [df1['value'][row] + df2['value'][np.argmin(df2['distances'][row])]
for row in range(len(df1))]
df1
node x y value new_value
0 abc 645 714 8 9
1 def 187 754 11 6
推荐阅读
- jupyter-notebook - 如何在谷歌计算引擎(深度学习 VM)上的 conda 环境中运行 jupyter lab?
- python - 如何使用 Python Telebot 发送多行文本
- javascript - 网页(在 php 中),即 Javascript websocket 客户端未连接到 Python Websocket Server
- android - 如何更改 Android Studio 终端键映射
- sql - 在每个类别中选择前 N 个最常购买的商品
- angular - 如何在 Angular 中管理大量类似的响应式表单
- c# - 在 C# 中使用 OpenXML Power Tool 数据透视表
- php - 不断收到此错误-不正确的整数值:'' for column 'poi_id' at row 1 )
- android - 如何在recyclerview中设置背景图片
- jquery - jQuery - 多个复选框选择以过滤结果