擅长:python、mysql、java
<p><strong>编辑</strong>:</p>
<p>正如您所说,您的真实数据集有3个以上的列,您只需在获取numpy nd array之前对3个列进行切片,如下所示:</p>
<pre><code>data['Value1'] = [x[y[0]:z[0]] for x, y, z
in data[['stringID','Index1','Index2']].to_numpy()]
</code></pre>
<hr/>
<p>你无法避免循环。但是,您可以使用numpy nd array作为源来简化列表理解,以加快它的速度,例如</p>
<pre><code>data['Value1'] = [x[y[0]:z[0]] for x,y,z in data.to_numpy()]
</code></pre>
<hr/>
<p><strong>在300K行上计时</strong>:</p>
<pre><code>data = pd.concat([data]*100000, ignore_index=True)
In [1380]: %timeit [x[y[0]:z[0]] for x,y,z in data.to_numpy()]
617 ms ± 24.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [1382]: %timeit [data['stringID'][i][data['Index1'][i][0]:data['Index2'][i][0]] for i in range(0,len(data['stringID']))]
11.3 s ± 320 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
</code></pre>
<p>因此,它比您的解决方案快大约18倍</p>