<h2>TL;博士</h2>
<p>下面的代码是我从这个问题中得出的最快答案:</p>
<pre><code>it = iter(df['a'])
df['b'] = [next(it).join(i) for i in df['b']]
</code></pre>
<p>上面的代码首先生成<code>a</code>列,然后每次都可以使用<code>next</code>获取下一个值,然后在列表中连接两个字符串</p>
<h2>长答覆:</h2>
<p>将展示我的解决方案:</p>
<p><strong>解决方案1:</strong></p>
<p>要使用<code>list</code>理解和生成器:</p>
<pre><code>it = iter(df['a'])
df['b'] = [next(it).join(i) for i in df['b']]
print(df)
</code></pre>
<p><strong>解决方案2:</strong></p>
<p>按索引分组,并<code>apply</code>和<code>str.join</code>两列的值:</p>
<pre><code>df['b'] = df.groupby(df.index).apply(lambda x: x['a'].item().join(x['b'].item()))
print(df)
</code></pre>
<p><strong>解决方案3:</strong></p>
<p>使用<code>list</code>理解,在列和<code>str.join</code>之间迭代:</p>
<pre><code>df['b'] = [x.join(y) for x, y in df.values.tolist()]
print(df)
</code></pre>
<p>这些代码全部输出:</p>
<pre><code> a b
0 a haealalao
1 b gbobobd
2 c gcrcecact
3 d ndidcde
</code></pre>
<h3>定时:</h3>
<p>现在是使用<code>timeit</code>模块进行计时的时候了,下面是我们用来计时的代码:</p>
<pre><code>from timeit import timeit
df = pd.DataFrame({'a': ['a', 'b', 'c', 'd'], 'b': ['hello', 'good', 'great', 'nice']})
def u11_1():
it = iter(df['a'])
df['b'] = [next(it).join(i) for i in df['b']]
def u11_2():
df['b'] = df.groupby(df.index).apply(lambda x: x['a'].item().join(x['b'].item()))
def u11_3():
df['b'] = [x.join(y) for x, y in df.values.tolist()]
print('Solution 1:', timeit(u11_1, number=5))
print('Solution 2:', timeit(u11_2, number=5))
print('Solution 3:', timeit(u11_3, number=5))
</code></pre>
<p>输出:</p>
<pre><code>Solution 1: 0.007374127670871819
Solution 2: 0.05485127553865618
Solution 3: 0.05787154087587698
</code></pre>
<p>因此,第一种解决方案是最快的,使用生成器</p>