python xarray 仅在特定日期对变量重新采样

python xarray resample variables only on specific dates

我有一个 Xarray 数据集,其中包含每日数据的不规则值。有时一天有两个值有时几天会有差距。

[Timestamp('2015-04-01 00:00:00'),
 Timestamp('2015-04-01 00:00:00'),
 Timestamp('2015-04-03 00:00:00'),
 Timestamp('2015-04-03 00:00:00'),
 Timestamp('2015-04-05 00:00:00'),
 Timestamp('2015-04-06 00:00:00'),
 Timestamp('2015-04-06 00:00:00')]

如果我应用 resample()

model.resample(time='1D').mean()

我最后得到

[Timestamp('2015-04-01 00:00:00'),
 Timestamp('2015-04-02 00:00:00'),
 Timestamp('2015-04-03 00:00:00'),
 Timestamp('2015-04-04 00:00:00'),
 Timestamp('2015-04-05 00:00:00'),
 Timestamp('2015-04-06 00:00:00'),
 Timestamp('2015-04-07 00:00:00')]

但我正在寻找这样的数据重采样

[Timestamp('2015-04-01 00:00:00'),
 Timestamp('2015-04-03 00:00:00'),
 Timestamp('2015-04-05 00:00:00'),
 Timestamp('2015-04-06 00:00:00')]

在不向模型添加新时间的情况下,我有哪些选择可以在相同的日期获得 .mean() 值?我尝试在一个小样本中重现该问题:

value_1 = np.arange(0,7,1)
times = np.array(['2015-04-01', '2015-04-01', '2018-01-03', '2018-01-03', '2018-01-05', '2018-01-05', '2018-01-06'], dtype='datetime64')

time_ = xr.Dataset(
        data_vars={'value':    (('time'), value_1)},
        coords={'time': times})

time_resample = time_.resample(time='1D').mean().sel(time=slice('2015-04-01', '2015-04-06'))

print(time_.time, time_resample.time)


<xarray.DataArray 'time' (time: 7)>
array(['2015-04-01T00:00:00.000000000', '2015-04-01T00:00:00.000000000',
       '2018-01-03T00:00:00.000000000', '2018-01-03T00:00:00.000000000',
       '2018-01-05T00:00:00.000000000', '2018-01-05T00:00:00.000000000',
       '2018-01-06T00:00:00.000000000'], dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 2015-04-01 2015-04-01 ... 2018-01-06 <xarray.DataArray 'time' (time: 6)>
array(['2015-04-01T00:00:00.000000000', '2015-04-02T00:00:00.000000000',
       '2015-04-03T00:00:00.000000000', '2015-04-04T00:00:00.000000000',
       '2015-04-05T00:00:00.000000000', '2015-04-06T00:00:00.000000000'],
      dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 2015-04-01 2015-04-02 ... 2015-04-06

您必须按 time 分组并应用函数均值。

time_groupby = time_.value.groupby('time').mean()

xarray 在这一点上与 pandas 非常相似。