擅长:python、mysql、java
<p>如果你想提高效率,不要使用循环。你可以将<code>assign</code>与词典理解一起使用。你知道吗</p>
<pre><code>df = df.assign(**{f'SR{n}': df['Open'].pct_change(n)
for n in list(range(1, 21)) + list(range(30, 270, 20))})
</code></pre>
<p>或不使用f字符串:</p>
<pre><code>df = df.assign(**{'SR{n}'.format(n): df['Open'].pct_change(n)
for n in list(range(1, 21)) + list(range(30, 270, 20))})
</code></pre>
<p><strong>计时</p>
<p>稍微快一点使用字典理解。你知道吗</p>
<pre><code>df = pd.DataFrame({'Open': range(252 * 5)})
%%timeit
df.assign(**{f'SR{n}': df['Open'].pct_change(n)
for n in list(range(1, 21)) + list(range(30, 270, 20))})
# 25.3 ms ± 2.45 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
for n in list(range(1, 21)) + list(range(30, 270, 20)):
df[f'SR{n}'] = df['Open'].pct_change(n)
# 28.3 ms ± 3.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>