【问题标题】:groupby multiple coords along a single dimension in xarray沿xarray中的单个维度分组多个坐标
【发布时间】:2020-06-08 09:11:12
【问题描述】:

我有一个沿单个维度具有多个坐标的 xarray。在下面的示例中,坐标ab 沿维度dim1 定义。我将如何groupby 使用沿相同维度定义的两个坐标?与this question 不同,我不是试图按照不同的维度进行分组,而是一个单一的维度。

import xarray as xr

d = xr.DataArray([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],
    coords={
        'a': ('dim1',['A', 'A', 'B', 'B']),
        'b': ('dim1',['1', '2', '1', '2']),
        'c': ('dim2',['x', 'y', 'z'])
    },
    dims=['dim1', 'dim2'])
d.groupby(['a','b']) # this gives: TypeError: `group` must be an xarray.DataArray or the name of an xarray variable or dimension

【问题讨论】:

    标签: python python-3.x pandas-groupby python-xarray


    【解决方案1】:

    这是我目前的解决方法:

    import numpy as np
    import xarray as xr
    
    def groupby_multicoords(da, fields):
        common_dim = da.coords[fields[0]].dims[0]
        tups_arr = np.empty(len(da[common_dim]), dtype=object)
        tups_arr[:] = list(zip(*(da[f].values for f in fields)))
        return da.assign_coords(grouping_zip=xr.DataArray(tups_arr, dims=common_dim)).groupby('grouping_zip')
    

    然后,groupby_multicoords(da=d, fields=['a', 'b'])

    但是,在分组之后,我仍然留下了“grouping_zip”坐标。我会很感激用d.groupby(['a','b']) 替换它..

    【讨论】:

      【解决方案2】:

      您可以使用.stack(new=[“dim1”,”dim2”) 将它们堆叠到单个 MultiIndex 中,然后按该维度分组。

      【讨论】:

      • 我不想按维度分组,而是按坐标分组。所以我想将ab 分组为:('A', '1')('B','2')。在这种情况下,这两个坐标沿同一维度定义。
      • 对——感谢您的澄清。您可以将ab 制作成堆叠尺寸坐标,然后按该坐标进行分组。不幸的是,目前无法将多个坐标传递给groupby
      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 2021-01-14
      • 2021-12-17
      • 2018-01-11
      • 2020-03-04
      相关资源
      最近更新 更多