小能豆

将 Pandas 中的所有 NaN 值向左移动

py

我有一个 (250, 33866) 数据框。如您在图片中看到的,所有值都NaN在每行的末尾。我想将这些NaN值移到数据框的左侧。同时我想将0列(引用 Id)保留在其位置(保持第一列)。

1.png

我试图定义一个循环遍历所有行和列的函数来执行此操作,但发现对于大数据来说,这样做效率很低。还有其他选择吗?谢谢


阅读 17

收藏
2024-12-13

共1个答案

小能豆

您可以反转列df,删除 NaN;构建 DataFrame 并将其反转回来:

out = pd.DataFrame(df.iloc[:,::-1].apply(lambda x: x.dropna().tolist(), axis=1).tolist(), 
                   columns=df.columns[::-1]).iloc[:,::-1]

例如,对于如下所示的 DataFrame:

   col0  col1  col2  col3  col4
1   1.0   2.0   3.0  10.0  20.0
2   1.0   2.0   3.0   NaN   NaN
3   1.0   2.0   NaN   NaN   NaN

上述代码产生:

   col0  col1  col2  col3  col4
0   1.0   2.0   3.0  10.0  20.0
1   NaN   NaN   1.0   2.0   3.0
2   NaN   NaN   NaN   1.0   2.0
2024-12-13