如何解决如何使用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
>>> 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 举报,一经查实,本站将立刻删除。