擅长:python、mysql、java
<p><strong>方法1:</strong>这是一个使用<a href="https://stackoverflow.com/a/44559180/">^{<cd1>}</a>-</p>
<pre><code>pd.DataFrame(justify(df.values, invalid_val=np.nan, axis=1, side='left')[:,:4])
</code></pre>
<p>样本运行-</p>
^{pr2}$
<p><strong>方法2:</strong>使用特制的面具功能-</p>
<pre><code>def app2(df, N=4):
a = df.values
out = np.empty_like(a)
mask = df.isnull().values
mask_sorted = np.sort(mask,1)
out[~mask_sorted] = a[~mask]
return pd.DataFrame(out[:,:N])
</code></pre>
<p>运行时测试保持秩序的工作解决方案-</p>
<pre><code># Using df from posted question to recreate a bigger one :
df = df.set_index('Index')
df = pd.concat([df] * 10000, ignore_index=1)
In [298]: %timeit app2(df)
100 loops, best of 3: 4.06 ms per loop
In [299]: %timeit pd.DataFrame(justify(df.values, invalid_val=np.nan, axis=1, side='left')[:,:4])
100 loops, best of 3: 4.78 ms per loop
In [300]: %timeit df.apply(sorted, key=np.isnan, axis=1).iloc[:, :4]
1 loop, best of 3: 4.05 s per loop
</code></pre>