Python 仅当整行(每列)具有NaN值时,才将pandas中的行替换为下一行
我有一个数据框,在该数据框中,我只想将每列中具有NaN值的行替换为它下面的行。我尝试了多个提要的解决方案,并使用了ffill,但结果填充的单元格很少,而不是整行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
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