基于NetCDF月径流数据计算多年平均年径流
分析与解答
你的操作逻辑完全正确
你当前的代码完美匹配“计算多年平均年径流”的需求:
resample(time='Y').sum('time'):将月数据按年聚合,对每个年份的12个月径流求和,得到逐年的年径流总量,这一步保留时间维度(113个年份)。.mean(dim='time'):对所有年份的年径流数据在时间维度取平均,得到每个网格点的多年平均年径流,此时时间维度被聚合消除,只保留空间维度,完全符合预期结果。
关于结果全为0的可能原因
从输出看结果全为0,大概率和原始数据的nan处理有关:
- 原始
Runoff变量存在大量nan,如果之前执行过ds = ds.fillna(0),会将无数据区域填充为0,最终平均结果自然为0。 - 若需正确忽略
nan计算有效平均值,建议在聚合时显式指定skipna=True:
dsann = ds.resample(time='Y').sum('time', skipna=True).mean(dim='time', skipna=True)
等价实现方式(groupby)
用groupby替代resample的逻辑完全等价,代码如下:
dsann = ds.groupby('time.year').sum('time', skipna=True).mean(dim='year', skipna=True)
两种方式效率相近,可根据个人习惯选择。
验证建议
可以选取亚马逊、刚果等已知高径流流域的网格点,提取逐年径流数据手动计算平均值,对比xarray结果,确认计算正确性。
内容的提问来源于stack exchange,提问作者Crile
相关产品推荐
相关产品推荐

