<p>在这里,您可以尝试玩一些numpy技巧,如本<a href="https://stackoverflow.com/a/61234228/4819376">answer</a></p>
<p>我们首先用第1、2和3列中的值定义一个矩阵,然后用零添加第一列</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import numpy as np
# we first define a matrix
# with len(df) rows and 4 columns
mat = np.zeros((len(df), 4))
# Then we fill the last 3 columns
# with values from df
mat[:,1:] = df[["1", "2", "3"]].values
# Then a vector with values from df["TGR1"]
v = df["TGR1"].values
# Finally we take the given index
# from each row on matrix
df["BB"] = np.take_along_axis(mat, v[:,None], axis=1)
</code></pre>
<h2>时机</h2>
<p>我比较了一些答案的时间。我刚拿了一个比原来大一万的</p>
<pre class="lang-py prettyprint-override"><code>df_bk = pd.concat([df for i in range(10_000)], ignore_index=True)
</code></pre>
<p>在运行每个测试之前,我做<code>df = df_bk.copy()</code></p>
<h2>@wwnde的解决方案</h2>
<pre class="lang-sh prettyprint-override"><code>CPU times: user 430 ms, sys: 12.1 ms, total: 442 ms
Wall time: 452 ms
</code></pre>
<h2>@库克斯解</h2>
<pre class="lang-sh prettyprint-override"><code>CPU times: user 746 ms, sys: 0 ns, total: 746 ms
Wall time: 746 ms
</code></pre>
<h2>@拉帕奈溶液</h2>
<pre class="lang-sh prettyprint-override"><code>CPU times: user 5.54 ms, sys: 0 ns, total: 5.54 ms
Wall time: 4.84 ms
</code></pre>
<h2>@Psidom解</h2>
<pre class="lang-sh prettyprint-override"><code>CPU times: user 5.93 ms, sys: 141 µs, total: 6.07 ms
Wall time: 5.61 ms
</code></pre>
<p>Psidom的解决方案和我的解决方案的时间基本相同。这里有一个情节
<a href="https://i.stack.imgur.com/ky7jl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ky7jl.png" alt="enter image description here"/></a></p>