Tom*_*uza 4 python dataframe pandas fillna
我正在使用一个数据框,其中有一列包含多个 NaN,我想根据以下条件填充该 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
Run Code Online (Sandbox Code Playgroud)
然后,结果会是这样的:
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
Run Code Online (Sandbox Code Playgroud)
我可以使用任何功能来将此逻辑赋予 吗fillna?
谢谢!!
您可以使用限制参数来比较前向填充和后向填充Series,使用 for bitwise AND 进行链掩码,&仅针对缺失值的行,并将其替换为前向填充列:
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
Run Code Online (Sandbox Code Playgroud)