xarray groupby:对变量应用不同的约简

2024-05-13 20:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用xarraygroupby+reducer在空间光栅上执行空间覆盖/聚合。我想知道是否有一种方法可以对某些数据变量使用不同的缩减器。例如,在下面的代码中,我希望categorical_variablefirst()(或者mode减少,但似乎没有实现),而continuous_variablemean()减少

import xarray as xr
import numpy as np

categorical_variable = np.array([[1,1,1,1,1],
                                 [1,1,1,1,2],
                                 [1,1,1,2,2],
                                 [1,1,2,2,2],
                                 [1,2,2,2,2]], dtype='int16')
grouping_variable = np.array([[1,1,1,2,2],
                              [1,1,3,2,2],
                              [1,3,3,3,3],
                              [3,3,3,3,3],
                              [4,4,4,4,4]], dtype='int16')
continuous_variable = np.random.rand(5,5)
xr_dataset = xr.Dataset({'grouping_variable': xr.DataArray(grouping_variable,
                                                           dims=['x', 'y']),
                         'categorical_variable': xr.DataArray(categorical_variable,
                                                              dims=['x', 'y']),
                         'continuous_variable': xr.DataArray(continuous_variable,
                                                             dims=['x', 'y'])})
xr_grouped = xr_dataset.groupby('grouping_variable')
xr_reduced = xr_grouped.mean()

Tags: importasnp空间meanarrayvariablecontinuous
1条回答
网友
1楼 · 发布于 2024-05-13 20:59:58

这在xarray目前还不可能一蹴而就,但是由于你正在失去空间结构,你可以非常简单地通过pandas并使用agg

>>> df = xr_dataset.to_dataframe()
>>> df.groupby('grouping_variable').agg({"categorical_variable": "first",
                                         "continuous_variable": "mean"})

                   categorical_variable  continuous_variable
grouping_variable                                           
1                                     1             0.458534
2                                     1             0.822294
3                                     1             0.539483
4                                     1             0.515586

相关问题 更多 >