如何根据 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
这对于大数据帧来说更快。
我有一个像
这样的数据框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
这对于大数据帧来说更快。