我有一个如下所示的数据框架:
df = pd.DataFrame({'A': [1, np.nan, np.nan, np.nan, 3, 3, 3, 3, np.nan, np.nan, np.nan, 5, 5, 5, 6, 6, 6, np.nan, np.nan, np.nan, 6, 7, 8, 9, 10,np.nan, np.nan, 10, 11]})
我想只在前一个非nan值等于当前的非nan值时填充nan值。
预期输出:
df = pd.DataFrame({'A': [1, np.nan, np.nan, np.nan, 3, 3, 3, 3, np.nan, np.nan, np.nan, 5, 5, 5, 6, 6, 6, np.nan, np.nan, np.nan, 6, 7, 8, 9, 10, np.nan, np.nan,10, 11],'fill_nan': [1, np.nan, np.nan, np.nan, 3, 3, 3, 3, np.nan, np.nan, np.nan, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 10, 10, 10,10, 11]})
尝试比较bfill
ffill
:
s = df.ffill()
out = s.where(s.eq(df.bfill()))
输出:
A
0 1.0
1 NaN
2 NaN
3 NaN
4 3.0
5 3.0
6 3.0
7 3.0
8 NaN
9 NaN
10 NaN
11 5.0
12 5.0
13 5.0
14 6.0
15 6.0
16 6.0
17 6.0
18 6.0
19 6.0
20 6.0
21 7.0
22 8.0
23 9.0
24 10.0
25 10.0
26 10.0
27 10.0
28 11.0