python - Python按数字列匹配两个数据框
问题描述
我有两个数据框,每个都有经度和纬度。df1 是带有坐标的小地方,df2 是带有城市中心坐标的城市名称。我想通过在 df2 中找到最近的坐标,为 df1 中的每个位置分配一个城市名称。
df1
好像:
location lng lat
a 117 33
b 114 32
c 101 23
d 131 46
df2
好像:
city citylng citylat
X 100 20
Y 130 40
Z 115 30
一个可能的标准可以是 (1) 计算坐标之间的差并将差求和。(2) 选择差和最小的城市。例如 和 的坐标之差location a
是city Z
,abs(117-115)+abs(33-30)=5
而(a,X)= abs(117-100)+abs(33-20)=30
和(a,Y)= abs(117-130)+abs(33-40)=20
。因此,我们有:
location city
a Z
有没有办法在 Python 中对此进行编码?
解决方案
我们可以通过numpy
广播和argmin
s1=df1.lng.values
s2=df1.lat.values
idx=np.abs(s1-df2.citylng.values[:,None] + s2 - df2.citylat.values[:,None]).argmin(axis=0)
df1['city']=df2.city.iloc[idx].values
df1
location lng lat city
0 a 117 33 Z
1 b 114 32 Z
2 c 101 23 X
3 d 131 46 Y
推荐阅读
- ruby - Docker - ruby, nokogiri - 安装 nokogiri (1.10.2) 时出错,
- css - 垂直居中:grid 和 flex 方法有什么区别?
- pyspark - 如何使用 PySpark 测量逻辑回归的精度和召回率?
- eclipse - 附加到 Eclipse 中的 PATH 环境变量
- c# - 确定 Windows 窗体是否在监视器上?
- python - 如何从我当前在机器上的浏览器中打开的网页中获取文本/html?
- javascript - Angular-UI-Select ng-model 不适用于 $scope 上的简单变量
- php - 如何在php中使用exec运行多个命令
- google-cloud-platform - Google Cloud Functions 实现互斥锁的模式是什么
- c# - 自托管 Owin ASP.NET web api 仅接受 localhost 连接