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