如何对含day_period维度的NetCDF文件计算逐日平均?
解决方案
要计算逐日平均值,核心是按**日期维度(年、月、日)**分组,对day_period维度下的3小时数据求平均。你之前的代码因未指定分组维度,直接调用mean()会对所有维度求平均,因此只得到全局均值。
步骤1:确认数据集维度
根据文件结构,数据集应包含year、month、day、day_period维度(day_period对应一天8个3小时时段,索引0-7)。
步骤2:两种实现方式
方式一:直接按年、月、日分组计算
无需额外创建时间维度,直接利用现有维度分组:
import xarray as xr ds = xr.open_dataset('2015_2016_SMAPGPH_monmean.nc') # 按年、月、日分组,对day_period维度求平均 day_mean = ds.groupby(['year', 'month', 'day']).mean(dim='day_period')
方式二:创建完整时间坐标后按日期分组
如果后续需要更灵活的时间操作,可先将分散的日期维度合并为标准时间坐标:
import xarray as xr import pandas as pd ds = xr.open_dataset('2015_2016_SMAPGPH_monmean.nc') # 1. 从year、month、day维度生成基础日期 base_dates = pd.to_datetime({ 'year': ds.year.values, 'month': ds.month.values, 'day': ds.day.values }) # 2. 给每个日期加上day_period对应的3小时偏移 full_times = base_dates[:, :, :, None] + pd.to_timedelta(ds.day_period.values * 3, unit='h') # 3. 将完整时间设置为数据集的坐标 ds = ds.assign_coords(time=full_times) # 4. 按日期分组(提取time的date部分),计算均值 day_mean = ds.groupby('time.date').mean(dim=['time', 'day_period'])
注意点
- 你之前用
sel(day_period = range(0,7))仅选取了前7个时段,漏掉了第8个时段(索引7),若要包含一天所有3小时数据,需去掉该筛选或改用range(0,8)。 - 计算完成后,
day_mean会保留对应日期维度,输出2015-2022年的逐日均值结果。
内容的提问来源于stack exchange,提问作者Xei
相关产品推荐
相关产品推荐

