如何调用xarray的groupby函数按年月组合对数据进行分组
How to call the xarray's groupby function to group data by a combination of year and month
我有一个 DataArray 对象,用于跨越几年的日常数据集。它有一个变量和三个维度,名为 latitude
、longitude
和 time
(每日)。时间坐标像time (time) datetime64[ns] 2016-01-01 2016-01-02 ... 2018-12-31
我想通过 DataArray 的 groupby 函数按年和月的组合对数据进行分组。但是下面的代码只给我int64
中的时间坐标,说1,2,3,...,12.
da_groupby_monthly = da.groupby('time.month').sum('time')
print(da_groupby_monthly)
输出:
<xarray.DataArray (month: 12, latitude: 106, longitude: 193)>
dask.array<shape=(12, 106, 193), dtype=int32, chunksize=(1, 106, 193)>
Coordinates:
* latitude (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
* longitude (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
* month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
如何保持时间的数据类型 datetime64[ns]
并使月份坐标类似于“2016-01”、“2016-02”、“2016-03”、... .. .、“2018-12”等。
我喜欢使用重采样方法。试试这个:
da_monthly = da.resample('1m', on='time').sum()
要更普遍地对多个变量(例如年和月)进行 xarray groupby 操作,您可以将变量组合在 pandas MultiIndex 中,使其成为非维度坐标,并将其传递给 groupby:
import pandas as pd
year_month_idx = pd.MultiIndex.from_arrays([da['time.year'], da['time.month']])
da.coords['year_month'] = ('time', year_month_idx)
da_monthly = da.groupby('year_month').sum()
您还可以通过堆叠坐标来创建与 groupby
一起使用的 MultiIndex。例如,给定一组 latitude/longitude 坐标,您可以对所有唯一的经纬度位置进行分组:
da_stacked = da.stack(latlon=['lat','lon'])
da_stacked.groupby('latlon').sum()
我有一个 DataArray 对象,用于跨越几年的日常数据集。它有一个变量和三个维度,名为 latitude
、longitude
和 time
(每日)。时间坐标像time (time) datetime64[ns] 2016-01-01 2016-01-02 ... 2018-12-31
我想通过 DataArray 的 groupby 函数按年和月的组合对数据进行分组。但是下面的代码只给我int64
中的时间坐标,说1,2,3,...,12.
da_groupby_monthly = da.groupby('time.month').sum('time')
print(da_groupby_monthly)
输出:
<xarray.DataArray (month: 12, latitude: 106, longitude: 193)>
dask.array<shape=(12, 106, 193), dtype=int32, chunksize=(1, 106, 193)>
Coordinates:
* latitude (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
* longitude (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
* month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
如何保持时间的数据类型 datetime64[ns]
并使月份坐标类似于“2016-01”、“2016-02”、“2016-03”、... .. .、“2018-12”等。
我喜欢使用重采样方法。试试这个:
da_monthly = da.resample('1m', on='time').sum()
要更普遍地对多个变量(例如年和月)进行 xarray groupby 操作,您可以将变量组合在 pandas MultiIndex 中,使其成为非维度坐标,并将其传递给 groupby:
import pandas as pd
year_month_idx = pd.MultiIndex.from_arrays([da['time.year'], da['time.month']])
da.coords['year_month'] = ('time', year_month_idx)
da_monthly = da.groupby('year_month').sum()
您还可以通过堆叠坐标来创建与 groupby
一起使用的 MultiIndex。例如,给定一组 latitude/longitude 坐标,您可以对所有唯一的经纬度位置进行分组:
da_stacked = da.stack(latlon=['lat','lon'])
da_stacked.groupby('latlon').sum()