python - 如何使用 xarray 计算组的大小?
问题描述
我想使用 分组后计算组的大小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
具有正确坐标和尺寸的缩小对象?有没有理由不引入DataArrayGroupBy.size()
类似于 Pandas 的方法?
(我在写这个问题时使用的是 xarray 版本 0.15.0。)
解决方案
这里的答案是使用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
推荐阅读
- xpages - 什么是控件的“绑定”属性以及如何使用它?
- sql-loader - 使用 sql loader 限制无效的日期格式数据
- google-apps-script - 在 Google Apps 脚本上使用带有自定义函数的触发器
- r - 将行名与列中包含的字符串匹配
- android - 如何在 android studio 中停止 FusedLocationProviderClient?
- .net-core - 在将 Azure AD 身份验证与 oidc 和中间件一起使用的 Web 应用中指定自定义 redirect_uri
- pytorch - 如何使用 CPU 运行 pytorch 项目?
- julia - Plots.jl 图例文本颜色?
- c# - 操作无法完成,因为 DbContext 已被释放。System.InvalidOperationException
- php - 以编程方式创建 WooCommerce 订单时设置外部订单 ID