使用Dataset/DataArray.group_by时单维度求和维度堆叠问题咨询
解决xarray中group_by仅对单个维度求和的问题
我明白你遇到的困扰了——当你的分组变量是多维的(比如示例里的kind同时有layer和qpoint两个维度),直接用group_by会默认把所有维度都纳入分组逻辑,最后导致维度堆叠,而你只想针对其中某一个维度完成分组求和。
这里有个精准的解决方案:在调用groupby的时候,通过dim参数指定你想要分组的单个维度,这样就能只对目标维度执行聚合操作,其他维度会被保留下来。
举个完整的示例,我们先给数据集加上一个数据变量用于演示求和:
import xarray as xr import numpy as np ds = xr.Dataset() ds['kind'] = (['layer', 'qpoint'], [ ['gamma', 'other', 'selected', 'selected', 'other', 'other'], ['selected', 'selected', 'other', 'gamma', 'other', 'other'], ]) # 新增随机数据变量用于演示求和逻辑 ds['values'] = (['layer', 'qpoint'], np.random.rand(2, 6))
如果你想针对qpoint维度按kind分组求和,同时保留layer维度,只需要这样写:
# 指定dim='qpoint',表示仅在qpoint维度上按kind分组 result = ds.groupby('kind', dim='qpoint').sum(dim='qpoint')
这样得到的结果会保留layer维度,同时把qpoint维度按kind聚合,最终维度为(layer, kind),完全符合你“仅对单个维度求和”的需求。
如果你的需求是针对layer维度分组求和,只需要把dim参数改成'layer'即可:
result = ds.groupby('kind', dim='layer').sum(dim='layer')
为什么这能解决问题?
默认情况下,当分组变量是多维的,xarray会把所有维度都作为分组的键(相当于每个(layer, qpoint)的组合都是独立分组),求和后会把所有维度都聚合掉。而通过dim参数指定单个维度,xarray只会在这个维度上根据分组变量的值进行分组,其他维度会被原样保留,完美实现你想要的“仅对指定单个维度求和”的效果。
内容的提问来源于stack exchange,提问作者Exp HP
相关产品推荐
相关产品推荐

