Lis*_*isa 2 python mean python-xarray
我有三个变量(T2M、U50M、V50M),我想从中找到多年来的一月平均值、二月平均值等。我有一个 xarry.Dataset - 名称 Multidata:
Dimensions: (time: 17520, lat: 17, lon: 15)
Coordinates:
* lat (lat) float64 47.0 47.5 48.0 48.5 49.0 ... 53.0 53.5 54.0 54.5 55.0
* lon (lon) float64 6.25 6.875 7.5 8.125 8.75 ... 13.12 13.75 14.38 15.0
* time (time) datetime64[ns] 2001-01-01T00:30:00 ... 2002-12-31T23:30:00
Data variables:
T2M (time, lat, lon) float32 dask.array<chunksize=(24, 17, 15), meta=np.ndarray>
V50M (time, lat, lon) float32 dask.array<chunksize=(24, 17, 15), meta=np.ndarray>
U50M (time, lat, lon) float32 dask.array<chunksize=(24, 17, 15), meta=np.ndarray>
Run Code Online (Sandbox Code Playgroud)
我尝试过: ---- 但只能得到每年的月平均值
monthly_data = Multidata.resample(time="MS").mean()
output:
<xarray.Dataset>
Dimensions: (time: 24, lat: 17, lon: 15)
Coordinates:
* time (time) datetime64[ns] 2001-01-01 2001-02-01 ... 2002-12-01
* lat (lat) float64 47.0 47.5 48.0 48.5 49.0 ... 53.0 53.5 54.0 54.5 55.0
* lon (lon) float64 6.25 6.875 7.5 8.125 8.75 ... 13.12 13.75 14.38 15.0
Data variables:
T2M (time, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
V50M (time, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
U50M (time, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
Run Code Online (Sandbox Code Playgroud)
我也尝试过:但再次仅获取每年的月平均值
year_month_idx = year_month_idx = pd.MultiIndex.from_arrays([Multidata['time.year'].values, Multidata['time.month'].values])
Multidata.coords['year_month'] = ('time', year_month_idx)
monthly_data2 = Multidata.groupby('year_month').mean()
output:
<xarray.Dataset>
Dimensions: (year_month: 24, lat: 17, lon: 15)
Coordinates:
* lat (lat) float64 47.0 47.5 48.0 48.5 ... 54.0 54.5 55.0
* lon (lon) float64 6.25 6.875 7.5 8.125 ... 13.75 14.38 15.0
* year_month (year_month) MultiIndex
- year_month_level_0 (year_month) int64 2001 2001 2001 ... 2002 2002 2002
- year_month_level_1 (year_month) int64 1 2 3 4 5 6 7 8 ... 6 7 8 9 10 11 12
Data variables:
T2M (year_month, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
V50M (year_month, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
U50M (year_month, lat, lon) float32 dask.array<chunksize=(1, 17, 15), meta=np.ndarray>
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里,我怎样才能将总体年份的月平均数汇总在一起?
如果我理解的话,你追求的是每个月的长期平均值。如果是这样,您可以使用 xarray 代替groupby()来resample()计算这些气候。
climatology = Multidata.groupby("time.month").mean("time")
Run Code Online (Sandbox Code Playgroud)
请参阅此处的xarray 文档计算每月异常值。