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

仅对双时间维度DataArray重采样单维度时丢失另一维度

解决xarray多时间维度重采样丢失维度的问题

我懂你遇到的这个困扰——当你在带有两个时间相关维度(初始化时间T1是datetime类型,预报时效T2是timedelta类型)的DataArray上执行重采样时,非操作的维度居然直接丢失了,这确实挺闹心的。其实这大多是操作细节没注意到,咱们来一步步解决它。

先复现你的场景

首先我先还原你的测试代码,方便后续演示:

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

# 创建两个时间维度
T1 = pd.date_range('2001-01-01','2001-01-28', freq='12H')
T2 = pd.timedelta_range(start='1 day', end='3 day', freq='3H')
da_3H = xr.DataArray(np.random.randn(T1.size, T2.size), dims=('T1','T2'))

正确的重采样操作(保留另一个维度)

不管你是对T1还是T2重采样,只要用对方法,另一个维度都会被完整保留:

对初始化时间T1重采样(datetime维度)

如果你想把T1从12小时频率聚合到日尺度,直接用resample配合聚合函数即可,xarray会自动只对指定维度操作,保留其他维度:

# 把T1重采样到日尺度,计算均值
da_daily_T1 = da_3H.resample(T1='D').mean()
# 查看结果维度:('T1', 'T2'),两个维度都在
print(da_daily_T1.dims)

如果担心默认聚合有问题,也可以显式指定要聚合的维度:

da_daily_T1 = da_3H.resample(T1='D').mean(dim='T1')

对预报时间T2重采样(timedelta维度)

对于timedelta类型的T2,xarray同样支持重采样操作,只需要传入对应的时间频率字符串:

# 把T2从3小时重采样到6小时,计算均值
da_6H_T2 = da_3H.resample(T2='6H').mean()
# 查看结果维度:('T1', 'T2'),T1维度依然保留
print(da_6H_T2.dims)

如果还是出现维度丢失?检查这几点

  • 升级xarray版本:较旧的xarray版本对多时间维度的支持可能不完善,建议升级到最新版:
    pip install --upgrade xarray pandas
    
  • 避免全维度聚合:有些聚合函数(比如不带参数的sum())会默认对所有维度聚合,但只要你用resample指定了目标维度,就只会对该维度进行聚合。
  • 检查维度名拼写:如果重采样时写错了维度名,xarray可能会报错或者意外处理其他维度,确认你的维度名和DataArray中的完全一致。

扩展:同时对两个时间维度重采样

如果需要同时调整两个时间维度的频率,可以链式调用两次resample:

# 先把T1聚合成日尺度,再把T2聚合成6小时尺度
da_double_resample = da_3H.resample(T1='D').mean().resample(T2='6H').mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:32:20