<blockquote>
<p>For a particular type of dataframe (which contains a particular
column), I do not want the Avg Weight to be scaled.</p>
</blockquote>
<p>使用<code>if</code>或三元语句确定数据帧中是否存在列:</p>
<pre><code>def scale(df):
dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
scale_cols = ['Avg Spd'] if 'some_col_label' in df else ['Avg Wt', 'Avg Spd']
dfpvt.loc[: scale_cols] /= 100
return dfpvt
</code></pre>
<p>其思想是减少重复的代码,只修改更改所需列所需的最基本的对象,在本例中是<code>list</code>对象。你知道吗</p>
<p>对于更通用的函数,可以使用<code>scale_cols</code>作为参数,<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pipe.html" rel="nofollow noreferrer">^{<cd4>}</a>通过函数创建数据帧:</p>
<pre><code>def scale(df, scale_cols):
dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
dfpvt.loc[: scale_cols] /= 100
return dfpvt
df = df.pipe(scale, ['Avg Spd'] if 'some_col_label' in df else ['Avg Wt', 'Avg Spd'])
</code></pre>
<hr/>
<blockquote>
<p>all df have the same column names, so to differentiate the "SpecialDF"
from others is only by its name passed into the function.</p>
</blockquote>
<p>您的最新要求完全不同。名称只是引用:不要依赖它们作为处理条件。好的做法是使用字典来存储数据帧,并使用字典中的键来标识“特殊”数据帧:</p>
<pre><code>dfs = {'df1': df1, 'df2': df2}
def scale(df, scale_cols):
dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
dfpvt.loc[: scale_cols] /= 100
return dfpvt
key = 'df1'
dfs[key] = dfs[key].pipe(scale, ['Avg Spd'] if key == 'df1' else ['Avg Wt', 'Avg Spd'])
</code></pre>