You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不转DataFrame实现xarray按坐标与变量分箱分组并保留坐标

解决方案

可以通过先给数据集添加温度分箱坐标、再做多维度分组的方式实现,无需转换为DataFrame,性能更优,且可以保留lat、lon等原有坐标维度。

完整实现代码

import numpy as np
import xarray as xr
import pandas as pd

# 示例数据生成(和原有逻辑一致)
lon = np.linspace(0,10,11)
lat =  np.linspace(0,10,11)
time = np.linspace(0,10,1000)
temperature = 3*np.random.randn(len(lat),len(lon),len(time))
ds = xr.Dataset(
    data_vars=dict(
        temperature=(["lat", "lon", "time"], temperature),
    ),
    coords=dict(
        lon=lon,
        lat=lat,
        time=time,
    ),
)
bin_t = np.linspace(-10,10,21)
bin_centers = (bin_t[:-1] + bin_t[1:]) * 0.5

# ----------------------核心逻辑----------------------
# 1. 为每个温度值匹配对应的分箱中心,作为新坐标加入数据集
ds = ds.assign_coords(
    temperature_bin = xr.cut(ds['temperature'], bins=bin_t, labels=bin_centers)
)
# 2. 按lat、lon、temperature_bin三个维度分组,统计每个分组内的样本数
ds_stats = ds.groupby(['lat', 'lon', 'temperature_bin']).count()
# 可选:将分箱坐标转为float类型,和原有输出格式完全对齐
ds_stats['temperature_bin'] = ds_stats['temperature_bin'].astype(float)

原groupby_bins方法失效的原因

直接调用ds.groupby_bins('temperature', bin_t)时,xarray会默认将所有维度的全部数据展平后按温度分箱统计,相当于全局计数,不会保留lat、lon的分组维度,因此只能得到只有温度分箱一个维度的统计结果。

内容的提问来源于stack exchange,提问作者Fxizap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:54:06