如何空间聚合 python、CDO 或 NCO 中的 netcdf 字段?

how to spatialy aggregate netcdf fields in python, CDO, or NCO?

我想将人口数据从 0.05 度重新网格化为 0.1 度。因为它是人口,所以我应该聚合(求和)人口值以将数据重新采样到更粗略的分辨率。虽然我认为这个问题会有一个简单的答案,但我确实找到了。我认为我的问题不需要样本数据,但您可以从 Gridded Population of the World (GPW), v4.

中找到人口数据

感谢您的帮助。

有兴趣的可以看看https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.binned_statistic_2d.html 在这个函数中,新的坐标作为bins。

如何使用xarray 包读取netcdf 文件,将ND xarray 数据数组转换为pandas 数据帧。然后使用 pandas 来实现你所需要的。然后您可以将 pandas 数据帧转换回 xarray 数据数组并保存为 netCDF 文件。使用 xarray 一切都应该很简单。我唯一担心的是 xarray 可能不适用于某些具有子数据组的 netCDF 文件。在这些情况下,您可能需要其他 Python 包来读取 netcdf 文件,例如 netCDF.

或者有一个Python重网格化工具叫xESMF,不过我还没试过

使用 NCO,您首先要将人口数据转换为密集字段(每单位面积的人口),然后是“regrid”,然后,如果需要,再转换回广泛变量(人口),例如,

ncap2 -s 'pop_per_area=pop/area' in.nc pop_area.nc
ncremap -G latlon=1800,3600 -g dest_grid.nc
ncremap -d dest_grid.nc pop_area.nc out.nc
ncap2 -s 'pop=pop_per_area*area' out.nc pop.nc

记录了所有命令 here。祝你好运!

您也可以使用 cdo 复制 Charlie 的转换方法,但是因为您的网格框大小 (before/after) 是彼此的整数倍(即您想要在 2x2 像素正方形上聚合),那么它是直接使用cdo函数更简单 gridboxsum

 cdo gridboxsum,2,2 in.nc out.nc