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

Python:替换窗口为2的滚动均值中的NaN为原始值

解决移动平均结果中NaN替换为原始数据的问题

没问题,我来帮你搞定这个需求~首先先明确你的原始数据和当前的处理情况:

原始数据集(Pandas Series)

import pandas as pd

ts = pd.Series(
    [1808, 1251, 3023, 4857, 2506, 2453, 1180, 4239, 1759, 2539, 3923, 2999],
    index=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    name='Sales'
)

当前移动平均的问题

你执行的窗口大小为2的移动平均代码(其实shift(0)可以省略,因为它就是原数据):

shifted = ts.shift(0)
window = shifted.rolling(window=2)
means = window.mean()
print(means)

得到的结果里第一个值是NaN,这是因为Jan没有前一个月份的数据来计算均值。要把这个NaN替换成对应位置的原始数据,有个非常简洁的方法:

修正后的解决方案

用Pandas的fillna()方法,直接传入原始的ts Series,它会自动匹配索引,把所有NaN的位置替换成原始数据对应的值:

# 简化移动平均计算(省略不必要的shift(0))
means = ts.rolling(window=2).mean()
# 替换NaN为对应位置的原始数据
means_filled = means.fillna(ts)
print(means_filled)

最终输出结果

Sales
Jan    1808.0
Feb    1529.5
Mar    2137.0
Apr    3940.0
May    3681.5
Jun    2479.5
Jul    1816.5
Aug    2709.5
Sep    2999.0
Oct    2149.0
Nov    3231.0
Dec    3460.5
dtype: float64

如果只需要替换第一个位置的NaN,也可以直接赋值:means.iloc[0] = ts.iloc[0],不过fillna(ts)的方法更通用,能处理任何位置出现的NaN(比如数据中间有缺失值的情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:39:02