在pandas数据帧上滚动操作后删除Nans

时间:2017-11-07 22:46:05

标签: python pandas

我有这个人。数据帧:

datetime
2001-01-01    3.22800
2002-01-01    2.69000
2003-01-01    2.75725
2004-01-01    3.22800
2005-01-01    3.36250
2006-01-01    3.83325
2007-01-01    2.82450
2008-01-01    4.77475
2009-01-01    3.63150
2010-01-01    3.69875
2011-01-01    4.90925
2012-01-01    3.96775
2013-01-01    4.64025
2014-01-01    4.64025
2015-01-01    4.57300

我想计算滚动窗口大小为3的平均值。

df.rolling(window=3).mean()

这给了我:

datetime
2001-01-01         NaN
2002-01-01         NaN
2003-01-01    2.891750
2004-01-01    2.891750
2005-01-01    3.115917
2006-01-01    3.474583
2007-01-01    3.340083
2008-01-01    3.810833
2009-01-01    3.743583
2010-01-01    4.035000
2011-01-01    4.079833
2012-01-01    4.191917
2013-01-01    4.505750
2014-01-01    4.416083
2015-01-01    4.617833

有没有办法计算滚动均值(或任何其他函数,使得没有获得NaN?因此,对于输入中的前2行,我们将使用接下来的3行和数据帧的最后2行,我们使用前3行?

我不能假设数据是循环的,即第一行不跟在最后一行。

1 个答案:

答案 0 :(得分:1)

使用shiftffill

df.rolling(window=3).mean().shift(-2).ffill()

输出:

2001-01-01  2.891750
2002-01-01  2.891750
2003-01-01  3.115917
2004-01-01  3.474583
2005-01-01  3.340083
2006-01-01  3.810833
2007-01-01  3.743583
2008-01-01  4.035000
2009-01-01  4.079833
2010-01-01  4.191917
2011-01-01  4.505750
2012-01-01  4.416083
2013-01-01  4.617833
2014-01-01  4.617833
2015-01-01  4.617833