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

如何按昼夜分组处理带时间与层级坐标的xarray DataArray数据?

实现方案

xarray与pandas没有内置的昼夜属性可直接用于分组,你可以通过提取time坐标的小时数自定义判断规则,快速完成拆分,两种常用实现方式如下:

前置检查

首先确认你的time坐标为UTC时区,如果未设置时区或为其他时区,可先转换:

# 若time原本就是UTC时间,仅补充时区标记
da['time'] = da.time.dt.tz_localize("UTC")
# 若time为其他时区(比如北京时间),转换为UTC
# da['time'] = da.time.dt.tz_localize("Asia/Shanghai").dt.tz_convert("UTC")

方法1:布尔索引直接拆分(推荐,适合仅需拆分两个数组的场景)

直接通过小时范围筛选time坐标,一步得到结果:

# 提取UTC时间的小时字段
hour_utc = da.time.dt.hour
# 筛选白天数据:6:00 <= 时间 < 18:00
da_day = da.sel(time=(hour_utc >= 6) & (hour_utc < 18))
# 筛选夜间数据:18:00 <= 时间 < 次日6:00
da_night = da.sel(time=~((hour_utc >= 6) & (hour_utc < 18)))

方法2:groupby分组(适合需要后续分组聚合运算的场景)

如果需要后续对昼夜分组做统计(比如求昼夜均值、极值等),可以先新增昼夜标签再分组:

# 新增daynight坐标,标记每个时间点是白天(day)还是夜间(night)
da = da.assign_coords(
    daynight = (da.time.dt.hour >=6) & (da.time.dt.hour <18)
).assign_coords(
    daynight = lambda x: x.daynight.map({True:"day", False:"night"})
)
# 按昼夜分组
daynight_group = da.groupby("daynight")
# 提取对应分组的数据
da_day = daynight_group["day"]
da_night = daynight_group["night"]
# 也可直接做分组聚合,比如求所有层级的昼夜平均
# daynight_mean = daynight_group.mean(dim="time")

边界调整说明

当前默认规则为:6:00整计入白天、18:00整计入夜间,如有需要可自行修改hour_utc的判断条件调整边界。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:48:05