如何使用 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"])
我有一个地理数据框(“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"])