Python 将列中的几个0替换为0的平均值和后续行

Python 将列中的几个0替换为0的平均值和后续行,python,pandas,Python,Pandas,我需要用一个值替换列中的后续零,该值是这些后续零和以下值的平均值。有没有一种优雅的方法来实现这一点,而不是逐个迭代所有行 import pandas as pd import datetime as dt dates=pd.date_range(start = dt.date(2019,1,1), end=dt.date(2019,1,18), freq='1D') data=[3,1,3.3,0,0,6,2.7,3,4,2.1,0,0,0,0,0,12,8,7] df = pd.DataFra

我需要用一个值替换列中的后续零,该值是这些后续零和以下值的平均值。有没有一种优雅的方法来实现这一点,而不是逐个迭代所有行

import pandas as pd
import datetime as dt
dates=pd.date_range(start = dt.date(2019,1,1), end=dt.date(2019,1,18), freq='1D')
data=[3,1,3.3,0,0,6,2.7,3,4,2.1,0,0,0,0,0,12,8,7]
df = pd.DataFrame(data=data, index=dates, columns=['how it is now'])
df['how it should be']= [3,1,3.3,2,2,2,2.7,3,4,2.1,2,2,2,2,2,2,8,7] 
谢谢。

给你

df.groupby(df['how it is now'].ne(0).iloc[::-1].cumsum())['how it is now'].transform('mean')

您可以使用简单的布尔索引和:

输出

            current  result
2019-01-01      3.0     3.0
2019-01-02      1.0     1.0
2019-01-03      3.3     3.3
2019-01-04      0.0     2.0
2019-01-05      0.0     2.0
2019-01-06      6.0     2.0
2019-01-07      2.0     2.0
2019-01-08      3.0     3.0
2019-01-09      4.0     4.0
2019-01-10      2.1     2.1
2019-01-11      0.0     2.0
2019-01-12      0.0     2.0
2019-01-13      0.0     2.0
2019-01-14      0.0     2.0
2019-01-15      0.0     2.0
2019-01-16     12.0     2.0
2019-01-17      8.0     8.0
2019-01-18      7.0     7.0

这是一个datetime@DanielMesejo,请参阅导入。这只是一个正在实例化的日期变量。谢谢!一些评论会有帮助。现在对我来说,它看起来像魔术@AntonZi我所做的:使用ne 0创建groupby键,因此,最后一个非零到下一个非零将被分成不同的组,然后我们得到thoseThanks的平均值,解决方案非常优雅。
            current  result
2019-01-01      3.0     3.0
2019-01-02      1.0     1.0
2019-01-03      3.3     3.3
2019-01-04      0.0     2.0
2019-01-05      0.0     2.0
2019-01-06      6.0     2.0
2019-01-07      2.0     2.0
2019-01-08      3.0     3.0
2019-01-09      4.0     4.0
2019-01-10      2.1     2.1
2019-01-11      0.0     2.0
2019-01-12      0.0     2.0
2019-01-13      0.0     2.0
2019-01-14      0.0     2.0
2019-01-15      0.0     2.0
2019-01-16     12.0     2.0
2019-01-17      8.0     8.0
2019-01-18      7.0     7.0