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