gpt4 book ai didi

python - 如何找到与一个变量中的最大值对应的所有变量的最大值?

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:37 25 4
gpt4 key购买 nike

我有一个包含许多变量的每日数据 xarray。我想提取每年最大的q_routed和最大q_routed发生当天其他变量的对应值。

    <xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, param_set: 1, time: 17167)
Coordinates:
* time (time) datetime64[ns] 1970-01-01 ...
* latitude (latitude) float32 44.5118
* longitude (longitude) float32 -111.435
* param_set (param_set) |S1 b''
Data variables:
ppt (time, param_set, latitude, longitude) float64 ...
pet (time, param_set, latitude, longitude) float64 ...
obsq (time, param_set, latitude, longitude) float64 ...
q_routed (time, param_set, latitude, longitude) float64 ...

下面的命令为我提供了一年中每个 变量的最大值,但这不是我想要的。

ncdat['q_routed'].groupby('time.year').max( )

试用

我试过了

ncdat.groupby('time.year').argmax('time')

导致这个错误:

ValueError: All-NaN slice encountered

我该怎么做?

最佳答案

对于这种操作,您可能希望使用自定义 reduce 函数:

def my_func(ds, dim=None):
return ds.isel(**{dim: ds['q_routed'].argmax(dim)})


new = ncdat.groupby('time.year').apply(my_func, dim='time')

现在,当您拥有完整的 nan 数组时,argmax 不会很好地发挥作用,因此您可能希望仅将此函数应用于包含数据的位置或预填充现有的 nan。像这样的东西可以工作:

mask = ncdat['q_routed'].isel(time=0).notnull()  # determine where you have valid data

ncdat2 = ncdat.fillna(-9999) # fill nans with a missing flag of some kind
new = ncdat2.groupby('time.year').apply(my_func, dim='time').where(mask) # do the groupby operation/reduction and reapply the mask

关于python - 如何找到与一个变量中的最大值对应的所有变量的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com