Python 仅当整行(每列)具有NaN值时,才将pandas中的行替换为下一行

Python 仅当整行(每列)具有NaN值时,才将pandas中的行替换为下一行,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框,在该数据框中,我只想将每列中具有NaN值的行替换为它下面的行。我尝试了多个提要的解决方案,并使用了ffill,但结果填充的单元格很少,而不是整行 ss s h b sb 0 NaN NaN NaN NaN NaN 1 3.0 NaN 14.0 NaN 8.0 2 9.0 8.0 23.0 NaN 2.0 3 NaN

我有一个数据框,在该数据框中,我只想将每列中具有NaN值的行替换为它下面的行。我尝试了多个提要的解决方案,并使用了ffill,但结果填充的单元格很少,而不是整行

     ss       s        h       b     sb
0   NaN     NaN      NaN     NaN    NaN
1   3.0     NaN     14.0     NaN    8.0
2   9.0     8.0     23.0     NaN    2.0
3   NaN     NaN      NaN     NaN    NaN
4   NaN     NaN      NaN     NaN    NaN
5   1.0     6.0      7.0    11.0    3.0
预期输出:

     ss       s        h       b     sb
0   3.0     NaN     14.0     NaN    8.0
1   3.0     NaN     14.0     NaN    8.0
2   9.0     8.0     23.0     NaN    2.0
3   1.0     6.0      7.0    11.0    3.0
4   1.0     6.0      7.0    11.0    3.0
5   1.0     6.0      7.0    11.0    3.0

您可以通过测试只有缺失值的行以及按列交换顺序累积和来创建组,并传递给:

详细信息

print ((df.notna().any(axis=1)).iloc[::-1].cumsum().iloc[::-1])
0    3
1    3
2    2
3    1
4    1
5    1
dtype: int32

如果使用
df=df.bfill(limit=2)
它对
s不起作用
那么如果我将限制设置为5?它不会取代你的?因为我只想在行中的所有值都为NaN时替换下一行。即使下一行有一些NaN,也没关系。@YashGhorpade-我的问题是limit=2为
s
工作,所以不确定预期输出中为什么有NaN。整行必须是NaN才能开始替换。然后替换为下面的行。第一行不会被替换,因为它不仅仅是NAN。然后第0行从第一行复制了NaN。因为我想将空行完全替换为另一行,如果另一行有一些NaN,则原始行也应该有相同的NaN。@jezrael工作得很好。非常感谢。
print ((df.notna().any(axis=1)).iloc[::-1].cumsum().iloc[::-1])
0    3
1    3
2    2
3    1
4    1
5    1
dtype: int32