<p>许多选择</p>
<ol>
<li>重新分配给指定的列:</li>
</ol>
<pre><code>df[['t1', 't2', 't3', 't4', 't5', 't6']] = \
df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000)
</code></pre>
<ol start=“2”>
<li><a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html#pandas-dataframe-loc" rel="nofollow noreferrer">^{<cd1>}</a>+<code>multiply</code>:</li>
</ol>
<pre><code>df.loc[:, ['t1', 't2', 't3', 't4', 't5', 't6']] = \
df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000)
</code></pre>
<ol start=“3”>
<li><code>*=</code>:</li>
</ol>
<pre><code>df[['t1', 't2', 't3', 't4', 't5', 't6']] *= 100000
</code></pre>
<ol start=“4”>
<li><a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html#pandas-dataframe-loc" rel="nofollow noreferrer">^{<cd1>}</a>+<code>*=</code>:</li>
</ol>
<pre><code>df.loc[:, ['t1', 't2', 't3', 't4', 't5', 't6']] *= 100000
</code></pre>
<ol start=“5”>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.update.html#pandas-dataframe-update" rel="nofollow noreferrer">^{<cd6>}</a>:</li>
</ol>
<pre><code>df.update(df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000))
</code></pre>
<p>测试框架:</p>
<pre><code>df = pd.DataFrame({
't1': {0: 1}, 't2': {0: 2}, 't3': {0: 3}, 't4': {0: 4}, 't5': {0: 5},
't6': {0: 6}, 't7': {0: 7}, 't8': {0: 8}, 't9': {0: 9}, 't10': {0: 10},
't11': {0: 11}
})
</code></pre>
<p>输出:</p>
<pre><code> t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11
0 100000 200000 300000 400000 500000 600000 7 8 9 10 11
</code></pre>
<hr/>
<p>通过perfplot的定时信息:</p>
<p><a href="https://i.stack.imgur.com/3GuMN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3GuMN.png" alt="benchmarking perfplot"/></a></p>
<div class="s-table-container">
^{tb1}$
</div>
<pre><code>import numpy as np
import pandas as pd
import perfplot
def gen_data(n):
return pd.DataFrame({f't{i}': np.arange(0, n) for i in range(1, 12)})
def assign_back_multiply(df):
df[['t1', 't2', 't3', 't4', 't5', 't6']] = \
df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000)
return df
def assign_back_with_loc_multiply(df):
df.loc[:, ['t1', 't2', 't3', 't4', 't5', 't6']] = \
df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000)
return df
def times_equals(df):
df[['t1', 't2', 't3', 't4', 't5', 't6']] *= 100000
return df
def times_equals_with_loc(df):
df.loc[:, ['t1', 't2', 't3', 't4', 't5', 't6']] *= 100000
return df
def df_update(df):
df.update(df[['t1', 't2', 't3', 't4', 't5', 't6']].multiply(100000))
return df
# @YoungMin Park's Answer
def for_loop_map(df):
target_columns = ['t1', 't2', 't3', 't4', 't5', 't6']
for one_column in target_columns:
df[one_column] = df[one_column].map(lambda x: x * 100000)
return df
if __name__ == '__main__':
out = perfplot.bench(
setup=gen_data,
kernels=[
assign_back_multiply,
assign_back_with_loc_multiply,
times_equals,
times_equals_with_loc,
df_update,
for_loop_map
],
labels=[
'assign_back_multiply',
'assign_back_with_loc_multiply',
'times_equals',
'times_equals_with_loc',
'df_update',
'for_loop_map @YoungMin Park'
],
n_range=[2 ** k for k in range(25)],
equality_check=None
)
out.save('perfplot_results.png', transparent=False)
</code></pre>