使用多个可能值按月筛选 xarray.DataArray

Fitering xarray.DataArray by month with multiple possible values

我想过滤 xarray DataArray 以仅保留月份属于某些 month_list.

的数据

假设我需要四月和六月,我的 month_list 将是 [4, 6]
理想情况下我想做的是:

da.where(da.time.dt.month in month_list, drop=True)

但这会引发错误(因为 in):
ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

所以我想到了这个解决方案:

def month_resampler(da: DataArray):
        acc = []
        for gr, val in da.groupby(da.time.dt.month):
            if gr in month_list:
                acc.append(val)
        return xarray.concat(acc, "time")

但是这里用groupby感觉有点大材小用了。特别是我不确定在处理大型数据集时 groupby 的性能如何。 我相信 selisel 会更好地过滤元素,但我找不到正确使用它们的方法。

有什么想法吗?

您可以使用 numpy.isin 过滤预定义的月份列表。

示例:


import xarray as xr
import numpy as np

x = xr.tutorial.load_dataset("air_temperature")

# desired months
mon_list = [2, 3, 4, 8]

# before
print(np.unique(x.time.dt.month))

# [ 1  2  3  4  5  6  7  8  9 10 11 12]

xsel = x.sel(
    time=np.isin(x.time.dt.month, mon_list)
)

# after
print(np.unique(xsel.time.dt.month))

# [2 3 4 8]