繁体   English   中英

Pandas 滚动平均值错误地返回 nan 值

[英]Pandas rolling mean incorrectly returning nan values

我有一个包含 nan 值的数据集,我正在尝试使用滚动平均值填充这些值。 我这样做的代码如下:

df = pd.DataFrame({'vals': med_vals})
print(df[353:363])

vals
353 17682.196292
354 13796.403594
355 14880.418179
356 14139.141779
357 15397.070537
358 15108.345602
359 14286.259755
360 14962.745719
361 NaN
362 NaN
df_filled = df.fillna(df.rolling(7,min_periods = 1).mean())
print(df_filled[353:365])

    vals
353 17682.196292
354 13796.403594
355 14880.418179
356 14139.141779
357 15397.070537
358 15108.345602
359 14286.259755
360 14962.745719
361 14795.663595
362 14778.712678
363 14938.605403
364 14785.783692
365 14624.502737
366 14962.745719
367 NaN
368 NaN
369 NaN

代码填充 null 值的窗口 1,然后停止。 此外,它添加的最后一个值与未填充数据中的最后一个非空值相同(360 和 366 相同)。 如何用我的代码解决这个问题?

你得到的正是你所要求的。 当您进行滚动平均时, numpy将当前单元格作为 window 的右边缘。 因此,在设置单元格 361 时:

355  356  357  358  359  360  361  362  363  364  365 366
 ^-----------------------------^

因为 361 是一个 NaN,所以你得到其他六个的平均值。 继续:

355  356  357  358  359  360  361  362  363  364  365  366
      ^-----------------------------^
           ^-----------------------------^
                ^-----------------------------^
                     ^-----------------------------^
                          ^-----------------------------^

因此,当它计算 366 的值时,它将从 360 到 366 取平均值。该范围内唯一具有值的单元格是 360,因此它成为平均值。 您告诉它,该范围内只需要一个值即可。

你说有一个问题,但我根本不清楚你的期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM