如何根据 Pandas 中的空值条件左移

How to conditional left shift based on null values in Pandas

我有一个像

这样的数据框
df = pd.DataFrame({"A":[1,np.nan,5],"B":[np.nan,10,np.nan], "C":[2,3,np.nan]})
     A     B   C
0    1   NaN   5
1   NaN  10   NaN
2    2    3   NaN 

我想左移所有值以占据空值。期望的输出:

     A     B   C 
0    1     5  NaN
1   10   NaN  NaN
2    2    3   NaN 

我尝试使用一系列 df['A'].fillna(df['B'].fillna(df['C']) 来执行此操作,但在我的实际数据中有 100 多列。有更好的方法吗?

让我们做

out = df.T.apply(lambda x : sorted(x,key=pd.isnull)).T
Out[41]: 
      A    B   C
0   1.0  5.0 NaN
1  10.0  NaN NaN
2   2.0  3.0 NaN

我还想出了另一种不用排序的方法:

def shift_null(arr):
  return [x for x in arr if x == x] + [np.nan for x in arr if x != x]

out = df.T.apply(lambda arr: shift_null(arr)).T

这对于大数据帧来说更快。