【问题标题】:How to count size of groups using xarray?如何使用 xarray 计算组的大小?
【发布时间】:2020-10-07 21:45:51
【问题描述】:

我想在使用groupby() 分组后计算组的大小,即某个值的出现次数。使用 pandas 可以使用GroupBy.size()

>>> pd.DataFrame({'my_column': [1, 1, 1, 2, 2, 3]}).groupby(by='my_column').size()                                                  
my_column
1    3
2    2
3    1
dtype: int64

Numpy 使用 np.unique() 支持类似的东西:

>>> np.unique([1, 1, 1, 2, 2, 3], return_counts=True)[1]                                                                            
array([3, 2, 1])

使用 xarray 我只能找到非常尴尬的方法来实现相同的目标,例如将 DataArray 对象转换为 Pandas DataFrame:

>>> d = xr.DataArray([1, 1, 1, 2, 2, 3], name='my_column')
>>> d.to_dataframe().groupby(by='my_column').size()                                                                         
my_column
1    3
2    2
3    1
dtype: int64

...或者做一些非常难以理解的事情,例如:

>>> xr.ones_like(d).groupby(d).sum(dim='dim_0')                                                                                    
<xarray.DataArray 'my_column' (my_column: 3)>
array([3, 2, 1])
Coordinates:
  * my_column  (my_column) int64 1 2 3

有没有更好的方法来获得具有正确坐标和尺寸的缩小的DataArray 对象?有没有理由不引入类似于 Pandas 的DataArrayGroupBy.size() 方法?

(我在写这个问题时使用的是 xarray 版本 0.15.0。)

【问题讨论】:

    标签: python pandas python-xarray


    【解决方案1】:

    这里的答案是使用GroupBy.count():

    >>> d = xr.DataArray([1, 1, 1, 2, 2, 3], name='my_column')                                                                          
    >>> d.groupby(d).count()                                                                                                            
    <xarray.DataArray 'my_column' (my_column: 3)>
    array([3, 2, 1])
    Coordinates:
      * my_column  (my_column) int64 1 2 3
    

    【讨论】:

    • 哦,谢谢,这很容易。我以前使用过 count,但在将它与 xarray 数据集一起使用时,不知何故被它的行为弄糊涂了。看不出我是怎么错过的。
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2010-10-17
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多