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

Shift all NaN values in pandas to the left

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

我试图定义一个循环遍历所有行和列的函数来执行此操作,但我认为它对于大数据来说效率非常低。还有其他选择吗?谢谢

您可以反转 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