微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用xarray计算组的大小?

如何解决如何使用xarray计算组的大小?

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

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

Numpy使用np.unique()支持类似的功能

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

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

>>> d = xr.DataArray([1,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,1])
Coordinates:
  * my_column  (my_column) int64 1 2 3

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

(编写此问题时,我使用的是xarray版本0.15.0。)

解决方法

答案是使用GroupBy.count()

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。