pandas 用于处理xarray中的idxmax

qvtsj1bj  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(106)

我有一个xarray数据数组,它被定义为,(参见link

xarray.DataArray (y:3,x:5)

array([[ 2.,  1.,  2.,  0., -2.],
       [-4., nan,  2., nan, -2.],
       [nan, nan,  1., nan, nan]])

Coordinates:
y (y)int64   -1 0 1
x (x)int64   0 1 4 9 16

字符串
如果我想在x维度上找到沿着第一次出现的大于0的值,我可以使用类似(array>0).idxmax(dim='x')的命令,它将返回

xarray.DataArray 'x' (y: 3)

array([0, 4, 0])

Coordinates:
y (y)int64   -1 0 1


当我将阈值从0更改为4时,即(array>4).idxmax(dim='x'),dataarray的预期结果是[np.nan, np.nan, np.nan],因为数组中没有大于4的值。然而,它返回[0,0,0]
我想知道是否有任何方法来解决我的难题,即返回[np.nan, np.nan, np.nan]而不是[0,0,0]
先谢了。

tquggr8v

tquggr8v1#

您可以尝试使用.whereFalse值替换为nan

import xarray as xr

array = xr.DataArray(
    [
        [2.0, 1.0, 2.0, 0.0, -2.0],
        [-4.0, np.nan, 2.0, np.nan, -2.0],
        [np.nan, np.nan, 1.0, np.nan, np.nan],
    ],
    dims=["y", "x"],
    coords={"y": [-1, 0, 1], "x": np.arange(5.0) ** 2},
)

print(array.where(array > 0, np.nan).idxmax(dim="x"))
print(array.where(array > 4, np.nan).idxmax(dim="x"))

字符串
打印:

<xarray.DataArray 'x' (y: 3)>
array([0., 4., 4.])
Coordinates:
  * y        (y) int64 -1 0 1

<xarray.DataArray 'x' (y: 3)>
array([nan, nan, nan])
Coordinates:
  * y        (y) int64 -1 0 1

m2xkgtsf

m2xkgtsf2#

我认为你几乎不能改变结果。它不返回nan的原因是它提供了正确的结果。你交给函数idxmax的是一个只包含零的布尔数组(False=0)。所以函数将返回最大值的第一个位置,在本例中是0在位置0。
你可以做的是把这两件事分开:
1.查找包含大于阈值的值的行。如果没有,您已经有了失败状态,可以手动返回NaN。
1.只将这些行给予给函数,以便只获得这些行的结果。

相关问题