Pandas 基于掩码的正向填充数据帧。用最后一个有效值填充

Pandas 基于掩码的正向填充数据帧。用最后一个有效值填充,pandas,dataframe,python-2.x,Pandas,Dataframe,Python 2.x,我有一个如下所示的数据帧: 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,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,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
也就是说:向前填充掩码上与True匹配的值和掩码中包含False的列中的最后一个值。 我怎样才能得到这个呢?

让我们试试:

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

谢谢你搞定了!pandas df.mask(mask.ffill()。其中(~df.isnull()),如果您的pandas版本<0.23.4