Python 熊猫将零替换为最接近的平均非零值

Python 熊猫将零替换为最接近的平均非零值,python,pandas,Python,Pandas,我有一个数据帧: df = pd.DataFrame({'A':[0,0,15,0,0,12,0,0,0,5]}) 我想用最接近的非零值替换0值 例如,第一个值是0,然后我发现最近的非零值是15,因此我将其替换为15,然后数据变成:[15,0,15,0,0,12,0,0,0,0,5], 然后,对于除第一个之外的所有值,我需要找到最近的非零值的两侧,并对它们进行平均。所以对于第二个0,它将是(15+15)/2;第三个零是(15+12)/2 我只知道如何将零替换为最接近的值: df['A'].r

我有一个数据帧:

 df = pd.DataFrame({'A':[0,0,15,0,0,12,0,0,0,5]})
我想用最接近的非零值替换0值

例如,第一个值是0,然后我发现最近的非零值是15,因此我将其替换为15,然后数据变成:
[15,0,15,0,0,12,0,0,0,0,5],

然后,对于除第一个之外的所有值,我需要找到最近的非零值的两侧,并对它们进行平均。所以对于第二个0,它将是(15+15)/2;第三个零是(15+12)/2

我只知道如何将零替换为最接近的值:

df['A'].replace(to_replace=0, method='ffill')

0     0
1     0
2    15
3    15
4    15
5    12
6    12
7    12
8    12
9     5

但是前两个零值是不能替换的,而且这种方法不能得到平均值。

虽然不完全相同,但似乎解决问题的一个好办法是应用一个新的方法

您可以使用默认情况下执行线性插值的,将
limit\u direction
设置为
both
,以便向前和向后填充:

df['A'] = df.A.interpolate(limit_direction='both')

     A
0  15.00
1  15.00
2  15.00
3  14.00
4  13.00
5  12.00
6  10.25
7   8.50
8   6.75
9   5.00

这不是传统的方法,所以你必须为此编写一个循环,因为你必须经过多次迭代。在需要检查每个元素的位置,它位于附近的元素,然后执行相关操作: