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

xarray计算3月滑动均值无法跨年度导致年初月份为空的问题咨询

解决方案

问题根因

你当前的xarray对象将year和month拆分为两个独立维度,rolling操作默认仅在单个维度内部独立计算,即每个年份下的12个月份会单独执行滑动窗口计算,自然无法跨年份调取前一年11、12月的数据来计算当年1、2月的均值。
xarray本身没有提供直接让滑动窗口跨两个关联维度联动的参数,最稳妥的解决方式是先将离散的年、月维度合并为连续的时间维度,再执行滑动计算。

具体操作步骤

步骤1:合并年、月为连续时间维度

import pandas as pd
import xarray as xr

# 基于year和month生成连续的datetime类型时间坐标
my_xarray = my_xarray.assign_coords(
    time=pd.to_datetime(my_xarray.year.astype(str) + "-" + my_xarray.month.astype(str))
)
# 将(year, month)两个维度堆叠为单一时序维度time
my_xarray = my_xarray.stack(
    time=("year", "month")
).assign_coords(time=my_xarray.time)

步骤2:在连续时间维度上计算3个月滑动均值

# 窗口会自动按时间顺序跨年度计算,不会每年重置
my_xarray = my_xarray.rolling(time=3, center=False).mean()

步骤3(可选):恢复原始(year, lat, lon, month)维度结构

如果后续需要回到原来的维度排列,执行以下操作即可:

my_xarray = my_xarray.assign_coords(
    year=my_xarray.time.dt.year,
    month=my_xarray.time.dt.month
).set_index(time=["year", "month"]).unstack("time")

注意事项

  • 2020年的1、2月因为没有更早的2019年数据,仍会是空值,这是时序边界的正常情况;如果你的数据是气候态周期数据,可以手动将2024年的末尾2个月拼接到数据开头做周期填充,即可得到2020年1、2月的计算结果。
  • 你也可以通过调整rolling的center参数为True得到中心滑动平均结果,具体根据你的计算需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:03