Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Pandas中基于空值执行条件左移位_Python_Pandas_Coalesce_Fillna_Null Coalescing Operator - Fatal编程技术网

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

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

哇,这太棒了!哇,这太棒了!