Xarray去除重复时间索引并保留对应最大值的实现方案咨询
解决方案
你要实现的按重复时间点取最大值的需求,无需循环,用Xarray自带的groupby操作一行即可完成,性能远高于循环实现:
- 首先完成两个DataArray的拼接,这步你的写法是正确的:
test = xr.concat([data1, data2], dim='time')
- 直接按时间索引分组,对同时间点的所有值取最大值:
result = test.groupby("time").max(dim="time")
原代码报错原因
你写的循环逻辑中,当选中的时间点仅对应一条数据时(也就是每日12时的条目),test.sel(time=i)返回的结果已经没有time维度,再调用.max(dim='time')会触发维度不存在的报错。即使增加维度判断逻辑修复问题,循环实现的性能也远低于原生groupby方案,不推荐使用。
结果验证
最终得到的result时间维度长度为62,和data1的时间维度一致:每日00时的数值为data1和data2对应值的最大值,每日12时的数值保留data1的原始值。
内容的提问来源于stack exchange,提问作者Eli Turasky
相关产品推荐
相关产品推荐

