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



我有一个数据帧:

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,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

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

虽然不完全相同,但似乎解决您问题的一个很好的解决方案是应用线性插值。

您可以使用interpolate,默认情况下执行线性插值,将limit_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

最新更新