[英]Pandas replace zero as the nearest average non-zero value
我有一个数据框:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.