如何使用 geopandas 最近邻居制作移动平均线?

How to make moving average using geopandas nearest neighbors?

我有一个地理数据框(“GDF”),其中一列为“值”,另一列为“几何”(实际上是实际的地理区域),所以每一行代表一个区域。

“值”列在许多行中为零,在某些行中为大数。

我需要做一个“移动平均”或滚动平均,使用最近的邻居达到某个“max_distance”(我们可以假设 GDF 有一个局部投影的 CRS,所以 max_distance 有实际意义)。 因此,averaged_values 在大多数区域中既没有零值也没有大值,而是一个平均值。

一种方法是

for region in GDF:
    averaged_values=sjoin_nearest(GDF,GDF,maxdistance=1000).values.mean()

但我真的不知道如何进行。

预期输出将是一个包含 3 列的地理数据框: “值”、“averaged_values”和“几何”。

有什么想法吗?

您尝试做的也称为空间滞后。最好的方法是根据设定的距离创建空间权重矩阵并计算滞后,两者都使用 libpysal 库,它是 geopandas 生态系统的一部分。

import libpysal

# create weights
W = libpysal.weights.DistanceBand.from_dataframe(gdf, threshold=1000)

# row-normalise weights
W.transform = "r"

# create lag
gdf["averaged_values"] = libpysal.weights.lag_spatial(W, gdf["values"])