我有一个数据框:
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
但是无法替换前两个零值,并且这种方法无法获得平均值。
答案 0 :(得分:1)
虽然不完全相同,但是似乎可以通过应用linear interpolation来解决您的问题。
您可以使用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