<p>选中空字符串或首先转换为<code>bool</code>,然后转换为<code>int</code>,<code>str</code>,最后转换为<code>join</code>或<code>sum</code>:</p>
<pre><code>df['new'] = (df != '').astype(int).astype(str).apply(''.join, axis=1)
#faster alternative
df['new'] = (df != '').astype(int).astype(str).values.sum(axis=1)
print (df)
A B C D E new
0 asfe hrd 10100
1 eseg bdb jyf 11100
2 eesg htsdg sef hdts 11110
3 4dsf hdsr afse 10110
4 rdshg nfd jftd 01011
5 hdt th 11000
6 gase tjf htf 11010
7 gex 10000
8 gsges hdts jfdt 10101
9 hhbr aseg 10100
</code></pre>
<p>时间安排:</p>
<pre><code>df = pd.concat([df] * 1000, ignore_index=True)
In [99]: %timeit df.astype(bool).astype(int).astype(str).values.sum(axis=1)
10 loops, best of 3: 155 ms per loop
In [100]: %timeit (df != '').astype(int).astype(str).values.sum(axis=1)
10 loops, best of 3: 158 ms per loop
In [101]: %timeit (df != '').astype(int).astype(str).apply(''.join, axis=1)
1 loop, best of 3: 330 ms per loop
In [102]: %timeit df.astype(bool).astype(int).astype(str).apply(''.join, axis=1)
1 loop, best of 3: 326 ms per loop
In [103]: %timeit df.astype(bool).astype(int).apply(lambda row: ''.join(str(i) for i in row), axis=1)
1 loop, best of 3: 210 ms per loop
</code></pre>