首页 > 解决方案 > 使用python用3个月前的平均值填充0

问题描述

我的数据集具有如下值

date           quantity
01/04/2018        35
01/05/2018        33
01/06/2018        75
01/07/2018         0
01/08/2018        70
01/09/2018         0
01/10/2018        66

我试过的代码:

df['rollmean3']  = df['quantity'].rolling(3).mean()

输出:

2018-04-01  35.0    NaN
2018-05-01  33.0    NaN
2018-06-01  75.0    47.666667
2018-07-01  0.0     36.000000
2018-08-01  70.0    48.333333
2018-09-01  0.0     23.333333
2018-10-01  66.0    45.333333

预期输出:但我需要输出,因为它应该取 35,33 和 75 的平均值并将其填充为 0.0 值。对于下一个零,它应该计算前三个值的平均值并填充它。

2018-04-01  35.0    
2018-05-01  33.0    
2018-06-01  75.0    
2018-07-01  0.0     47.666667
2018-08-01  70.0    
2018-09-01  0.0     64.22222 # average of (0, 47.6667 and 75)
2018-10-01  66.0    

应该显示这样的输出

标签: pythonpandas

解决方案


不幸的是,Pandas 中似乎没有针对此问题的矢量化解决方案。您需要迭代行并一一填写缺失值。这会很慢;如果您需要加快速度,您可以使用Numba JIT 编译您的代码。


推荐阅读