基于掩码的前向填充数据帧。填写最后一个有效值

Foward-fill dataframe based on mask. Fill with last valid value

我有一个如下所示的数据框:

index,col1,col2
1,NaN,NaN
2,NaN,NaN
3,NaN,20
4,NaN,21
5,10,22
6,11,23
7,12,24
8,13,NaN
9,NaN,NaN

还有一个布尔掩码数据框,如下所示:

index,col1,col2
1,False,False
2,False,False
3,False,False
4,False,True
5,False,False
6,False,False
7,True,True
8,True,False
9,False,False

我想将它们转换成这个最终数据框:

index,col1,col2
1,NaN,NaN
2,NaN,NaN
3,NaN,20
4,NaN,20
5,10,22
6,11,23
7,11,23
8,11,NaN
9,NaN,NaN

即:用掩码中具有 False 的列中的最后一个值向前填充掩码上匹配 True 的值。 我怎样才能得到这个?

让我们试试:

df.mask(mask).ffill().where(df.notna())

输出:

       col1  col2
index            
1       NaN   NaN
2       NaN   NaN
3       NaN  20.0
4       NaN  20.0
5      10.0  22.0
6      11.0  23.0
7      11.0  23.0
8      11.0   NaN
9       NaN   NaN