如何计算具有多个纬度和经度的多年的月平均值 - Pandas - Xarray

How to calculate the Monthly Average over Multiple Years with multiple Latitude and Longitude - Pandas - 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>

我试过:----但只能得到每年的月平均值

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>

我也试过:但是再次只得到每年的月均值

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>

我的错误在哪里,我怎样才能得到所有年份的月平均数?

据我了解,您是在 long-term 每个月的平均值之后。如果是这样,您可以使用带有 groupby() 而不是 resample() 的 xarray 来计算这些气候学。

climatology = Multidata.groupby("time.month").mean("time")

请参阅 xarray 文档 here 计算每月异常。