簡體   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