擅长:python、mysql、java
<p>如果顺序不重要,可以沿着第一个轴调用<code>np.sort</code>。在</p>
<pre><code>df = df.set_index('Index') # ignore if `Index` already is the index
pd.DataFrame(np.sort(df.values, axis=1)[:, :4],
columns=np.arange(1, 5)).add_prefix('Col')
Col1 Col2 Col3 Col4
0 89.123 100.000 100.000 100.000
1 92.342 98.300 100.000 101.530
2 97.602 98.713 100.230 NaN
3 93.473 98.123 102.060 NaN
4 94.529 94.529 102.205 107.755
</code></pre>
<p>这比我的第二个解决方案快得多,所以如果可能的话,一定要考虑这个。在</p>
<hr/>
<p>如果顺序很重要,请调用<code>sorted</code>+<code>apply</code>,并获取结果的前4列。在</p>
^{pr2}$
<hr/>
<p><strong>计时</strong><br/>
以下是我的答案的时间安排-</p>
<pre><code>df = pd.concat([df] * 10000, ignore_index=1)
%timeit df.apply(sorted, key=np.isnan, axis=1).iloc[:, :4]
1 loop, best of 3: 8.45 s per loop
pd.DataFrame(np.sort(df.values, axis=1)[:, :4],
columns=np.arange(1, 5)).add_prefix('Col')
100 loops, best of 3: 4.76 ms per loop
</code></pre>