【问题标题】:python xarray resample variables only on specific datespython xarray 仅在特定日期重新采样变量
【发布时间】:2020-04-13 02:04:09
【问题描述】:

我有一个 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

【问题讨论】:

  • groupby('Date') 或类似的东西,而不是resample
  • 如果您解决了您的问题,您可以回答您的问题并接受它(或任何其他答案)。这是比在问题内编辑解决方案更好的方法

标签: python-3.x pandas python-xarray


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2017-06-10
    • 2018-05-22
    • 2017-05-15
    • 2020-09-29
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多