在 Pandas 中具有向后和前瞻条件的 Fillna

Fillna with backwards and forward looking condition in Pandas

我正在使用一个数据框,其中有一列包含多个 NaN,我想根据以下条件进行填充: 如果向后和向前最多 3 行有 2 个相等的值,则用该值填充 NaN。

由于这可能不清楚,下面举几个例子:

  col1                    
0 10    
1 10  
2 NaN
3 NaN
4 NaN
5 10
6 5
7 NaN
8 5
9 NaN
10 NaN
11 NaN
12 NaN

那么,结果就是这样:

  col1                    
0 10    
1 10  
2 10
3 10
4 10
5 10
6 5
7 5
8 5
9 NaN
10 NaN
11 NaN
12 NaN

我可以使用任何功能将此逻辑提供给 fillna 吗?

谢谢!!

您可以比较正向填充和反向填充 Series 与 limit 参数,链掩码与 & 用于按位与仅具有缺失值的行,并将其替换为正向填充列:

m1 = df['col1'].isna()
f = df['col1'].ffill(limit=3)
m2 = f.eq(df['col1'].bfill(limit=3))

df['col2'] = df['col1'].mask(m1 & m2, f)
print (df)
    col1  col2
0   10.0  10.0
1   10.0  10.0
2    NaN  10.0
3    NaN  10.0
4    NaN  10.0
5   10.0  10.0
6    5.0   5.0
7    NaN   5.0
8    5.0   5.0
9    NaN   NaN
10   NaN   NaN
11   NaN   NaN
12   NaN   NaN