Python 如何在Pandas中基于空值执行条件左移位
我有一个像这样的数据框Python 如何在Pandas中基于空值执行条件左移位,python,pandas,coalesce,fillna,null-coalescing-operator,Python,Pandas,Coalesce,Fillna,Null Coalescing Operator,我有一个像这样的数据框 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
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
让我们做吧
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
这对于大数据帧来说更快。我还想出了另一种不用排序的方法:
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
这对于大数据帧来说速度更快。哇,这太棒了!哇,这太棒了!