Функция с тремя аргументами xarray.where
может быть более элегантной альтернативой:
import pandas as pd
import xarray as xr
times = pd.date_range('2000', '2002')
da = xr.DataArray(range(len(times)), [('time', times)])
result = xr.where(da.time.dt.year == 2001, 1, da)
Она также работает с массивами значений:
ones = xr.ones_like(da)
result = xr.where(da.time.dt.year == 2001, ones, da)
Если вы начинаете с чистого массива NumPy, вам нужно привести его к DataArray
и убедиться, что его временная координата точно совпадает с временной координатой da
;если начальная длина массива NumPy отличается от длины da
, вам необходимо добавить шаг переиндексации.Вот один из способов сделать это:
import numpy as np
year_2001_times = da.time.sel(time=da.time.dt.year == 2001)
arr = np.random.random(len(year_2001_times))
random_da = xr.DataArray(arr, [('time', year_2001_times)])
reindexed_random_da = random_da.reindex_like(da)
result = xr.where(da.time.dt.year == 2001, reindexed_random_da, da)