我有一个 Dataframe ,格式如下:
| Datetime|值|马|
| --|--|--|
| 1月1| 1 |没有一|
| 1月2日| 2 |没有一|
| 1月3日| 1 |没有一|
| 1月4日|N/A|没有一|
| 1月5日| 2 |没有一|
| 1月6日|N/A|没有一|
| 1月7日|N/A|没有一|
| 1月8日| 3 |没有一|
我希望计算“值”列的移动平均值,条件是最后3个非空值。
所需输出:
| Datetime|值|马|
| --|--|--|
| 1月1| 1 | 1 |
| 1月2日| 2 |1.5|
| 1月3日| 1 |一点三三|
| 1月4日|没有一|一点三三|
| 1月5日| 2 |一点六七|
| 1月6日|没有一|一点六七|
| 1月7日|没有一|一点六七|
| 1月8日| 3 | 2 |
例如,在1月8日的行中,移动平均值采用最后3个非空值(3,2,1)来给予值2,而1月3日仅采用(1,2,1)来计算移动平均值。因此,由于这种情况,我不能使用rolling.mean()方法。我也尽量避免使用一个循环,如果可能的话,因为框架是巨大的。解决这个问题的最好办法是什么?
2条答案
按热度按时间jvlzgdj91#
首先通过
Series.dropna
删除缺失值,计算滚动平均值,然后向前发送缺失值:或者使用方法
ffill
添加Series.reindex
:oipij1gg2#
您可以使用
dropna
删除NaN,然后使用method=ffill
计算rolling.mean
和reindex
以填充缺失值:输出量: