【问题标题】:Understanding xarray groupby了解 xarray groupby
【发布时间】:2016-10-30 03:02:46
【问题描述】:

我正在尝试计算每个组中的成员数量,类似于pandas.DataFrame.groupby.count。但是,它似乎不起作用。这是一个例子:

In [1]: xr_test = xr.DataArray(np.random.rand(6), coords=[[10,10,11,12,12,12]], dims=['dim0'])
        xr_test
Out[1]: <xarray.DataArray (dim0: 6)>
        array([ 0.92908804,  0.15495709,  0.85304435,  0.24039265,  0.3755476 ,
                0.29261274])
        Coordinates:
          * dim0     (dim0) int32 10 10 11 12 12 12

In [2]: xr_test.groupby('dim0').count()
Out[2]: <xarray.DataArray (dim0: 6)>
        array([1, 1, 1, 1, 1, 1])
        Coordinates:
          * dim0     (dim0) int32 10 10 11 12 12 12

但是,我希望得到这样的输出:

Out[2]: <xarray.DataArray (dim0: 3)>
        array([2, 1, 3])
        Coordinates:
          * dim0     (dim0) int32 10 11 12

发生了什么事?

换句话说:

In [3]: xr_test.to_series().groupby(level=0).count()
Out[3]: dim0
        10    2
        11    1
        12    3
        dtype: int64

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    这是一个错误! Xarray 目前假设(在这种情况下是错误的)对应于维度的坐标具有所有唯一值。这通常是一个好主意,但不应该是必需的。如果您制作另一个坐标,这应该可以正常工作,例如, xr_test = xr.DataArray(np.random.rand(6), coords={'aux': ('x', [10,10,11,12,12,12])}, dims=['x']) xr_test.groupby('aux').count()

    【讨论】:

    • 你想让我在 xarray git 中打开一个关于这个的问题吗?
    • 另外,我已经在另一段代码中创建了数组,它看起来与我在上面的示例中所拥有的完全一样:xr.DataArray(np.random.rand(6), coords=[[10,10,11,12,12,12]], dims=['dim0'])。现在这个其他代码相当冗长,需要几天才能运行。因此,重新运行这是不可能的,我怎样才能强制我现有的数组有一个新的坐标?我的意思是最好的方法是什么?
    • 我也找不到访问'aux' 中索引的方法。对我来说,随时访问这些内容很重要。我怎样才能访问它们?感谢您对此@Stephan 的帮助。
    • 看看swap_dims方法切换对应维度的坐标。 github跟踪器上的问题也很棒! (我目前正在度假并在手机上输入此内容。)
    猜你喜欢
    • 2021-12-15
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2017-06-20
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多