擅长:python、mysql、java
<p>有两点:</p>
<ol>
<li><p><a href="https://www.python.org/dev/peps/pep-0498/" rel="nofollow noreferrer">f-strings</a>始终比<code>str.format</code>快,请尽可能使用它们:</p>
<pre><code>In [3]: fmt = "{foo}"
In [4]: %timeit fmt.format(foo=5)
299 ns ± 21.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [5]: foo = 5
In [6]: %timeit f"{foo}"
79.2 ns ± 2.31 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
</code></pre>
</li>
<li><p>似乎<code>userid</code>独立于数据帧,我不确定为什么要使用<code>apply</code>,只需使用<a href="https://numpy.org/doc/stable/user/basics.broadcasting.html" rel="nofollow noreferrer">broadcasting</a>:</p>
<pre><code>In [8]: userid = "abcdef"
In [9]: pd.Series('abc def ghi jkl'.split()) + f'@{userid}'
Out[9]:
0 abc@abcdef
1 def@abcdef
2 ghi@abcdef
3 jkl@abcdef
dtype: object
</code></pre>
</li>
</ol>
<p>所以最后的方法可能是这样的:</p>
<pre><code>for num in range(5):
flag = ... # calculate flag
df[flag, f"col_{num}"] = df[flag, f"col_{num}"] + f"@{userid}"
</code></pre>