Python 查找Xarray聚合结果的时间索引

Python 查找Xarray聚合结果的时间索引,python,dataset,python-xarray,Python,Dataset,Python Xarray,我正在使用时间坐标在XArray数据集上运行聚合函数,例如 ds.max(), ds.min() 但是,由于这是一个天气数据集,因此返回结果的时间索引也很有用。例如给定月份内最高温度出现的日期 有人能给我一些建议吗?因为我在任何地方都找不到任何信息 我希望避免在数据集中搜索结果。我认为您正在查找idxmax或argmax等: 下面是一个3D示例: 将numpy导入为np 作为pd进口熊猫 将xarraya作为xr导入 da=xr.DataArray( 数据=np.random.rand(4

我正在使用时间坐标在XArray数据集上运行聚合函数,例如

ds.max(), ds.min()
但是,由于这是一个天气数据集,因此返回结果的时间索引也很有用。例如给定月份内最高温度出现的日期

有人能给我一些建议吗?因为我在任何地方都找不到任何信息


我希望避免在数据集中搜索结果。

我认为您正在查找
idxmax
argmax
等:

下面是一个3D示例:

将numpy导入为np
作为pd进口熊猫
将xarraya作为xr导入
da=xr.DataArray(
数据=np.random.rand(4,3,2),
库德={
“时间”:pd.日期范围(“2000-01-01”、“2000-01-04”),
“y”:[1,2,3],
“x”:[0.5,1.5],
},
dims=(“时间”、“y”、“x”),
)
idxmax
只接受单个维度;在这种情况下,它将给出每个(x,y)的最大值的日期

da.idxmax(“时间”)
数组(['2000-01-01T00:00:00.000000000','2000-01-04T00:00:00.000000000'],
[2000-01-03T00:00:00.000000000',2000-01-03T00:00:00.000000000'],
[2000-01-02T00:00:00.000000000',2000-01-02T00:00:00.000000000'],
dtype='datetime64[ns]')
协调:
*y(y)int32 1 2 3
*x(x)64 0.5 1.5
不过,搜索数据集并不是一个真正的问题——如果您不使用(未分区的)Python编写循环,这确实是一个廉价的操作:

这是完全通用的,基本上适用于每种骨料:

time\u max=da[“time”]。其中(da==da.max(“time”)).min(“time”)
注意,最后的减少(
.min
此处)可能是任何减少;不能保证数组中没有重复的最大值。这将及时选择第一个;如果您想要最后一个:

time\u max=da[“time”]。其中(da==da.max(“time”)).max(“time”)
等等

这可以写得非常简洁,因为xarray会自动将da[“time”]广播到3D数组(使用dims(time,y,x)),然后使用
where
方法将所有值设置为
NaN
NaT
。这显然需要一些内存,但这不太可能是您正在进行的任何分析中最昂贵的步骤