微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas rolling和ewm完全忽略na并使用最后N个有效数据

关于新的.rolling和.ewm方法.我正在使用熊猫0.19.0.

>>> df = pd.DataFrame({'A' : [1,2,np.nan, 3, 4, 5], 'B' : [1,2,3,np.nan, 4, 5]})
>>> df
     A    B
0  1.0  1.0
1  2.0  2.0
2  NaN  3.0
3  3.0  NaN
4  4.0  4.0
5  5.0  5.0

>>> df.rolling(window = 3).mean()
     A    B
0  NaN  NaN
1  NaN  NaN
2  NaN  2.0
3  NaN  NaN
4  NaN  NaN
5  4.0  NaN

期望的输出是完全忽略nan,使用最后3个有效数据,并将nan放在它们所在的位置.

     A    B
0  NaN  NaN
1  NaN  NaN # first two we don't have enough data
2  NaN  2.0 # B column is valid
3  2.0  NaN # completely ignore the nan in df.ix[2,'A'], take the mean of last 3 valid data
4  3.0  3.0
5  4.0  4.0

对于.ewm,我们有一个ignore_na参数.下面的代码得到我想要的

output = df.ewm(com=2, ignore_na=True).mean()
output[df.isnull()] = np.nan

解决方法:

困难的部分是你想要最后3个有效数据点.

df.apply(lambda x: x.dropna().rolling(3).mean().reindex(x.index))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐