繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM