我有几个包含不同信息的DataFrame.

一个名为atm_data的DataFrame包含几个数据点和相关联的列,这些数据点和列的空间分辨率超过1公里.另一个名为gridded_data的DataFrame包含数千行,其中包含更高空间分辨率(30米)的经度和纬度值.我想要做的是获取gridded_data个DataFrame中的数据,并从atm_data个DataFrame中的数据点分配最近的关联数据.

以下是我试图使用的代码,但我一直收到错误:‘ValueError:Cannot reindex on a轴,该轴有重复的标签.

lat_lon_points = atm_data[['lat','lon']].values
lat_lon_gridded = gridded_data[['lat','lon']].values

distances = cdist(lat_lon_gridded, lat_lon_points, metric='euclidean')

nearest_indices = np.argmin(distances, axis=1)

gridded_data = gridded_data.reset_index(drop=True)

gridded_data[['var1','var2','var3','var4','var5']] = atm_data[['var1','var2','var3','var4','var5']].iloc[nearest_indices]

我不得不重置gridded_data的索引,因为它是从以前的DataFrame中 Select 的.

如有任何建议/建议/帮助,我们将不胜感激!

Edit:我发现发生TypeError是因为被调用的变量不是DataFrame.我删除了那个错误.但是,我仍然收到上面提到的错误.

推荐答案

为此,您应该使用GeoPandas包.

只要您的两个空间数据框位于同一坐标系中,就可以使用此方法将最近的数据点连接在一起:

geopandas.sjoin_nearest()

这将创建多对一关系,其中多个atm_data点可能具有相同gridded_data的属性.

你可以在这里阅读关于这个函数的内容:https://geopandas.org/en/stable/docs/reference/api/geopandas.sjoin_nearest.html

Python相关问答推荐

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

如何使用stride_tricks.as_strided逆转NumPy数组

从webhook中的短代码(而不是电话号码)接收Twilio消息

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

Polars LazyFrame在收集后未返回指定的模式顺序

将图像拖到另一个图像

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

Python键入协议默认值

我如何根据前一个连续数字改变一串数字?

Django admin Csrf令牌未设置

基于行条件计算(pandas)

幂集,其中每个元素可以是正或负""""

为什么常规操作不以其就地对应操作为基础?

提高算法效率的策略?

并行编程:同步进程

如何在Python Pandas中填充外部连接后的列中填充DDL值

使用tqdm的进度条

如何使用加速广播主进程张量?

Pandas:将值从一列移动到适当的列

将字节序列解码为Unicode字符串