<h2>来自<code>df1</code>&;<code>df2</code>的列:</h2>
<ul>
<li>创建列名的<code>list</code></li>
</ul>
<pre><code>used_cols = ['return', 'high_low', 'turnover']
</code></pre>
<h2>数据帧列表:</h2>
<ul>
<li>使用列表理解创建数据帧列表</li>
</ul>
<pre><code>df_list = [pd.concat((df1, df2), ignore_index=True, sort=False).groupby(['date', 'ticker'])[v].apply(lambda x: min(x, key=abs)) for v in used_cols]
</code></pre>
<h3><code>df_list</code>的内容:</h3>
<ul>
<li>它们属于<code>pandas.core.series.Series</code>类型</li>
</ul>
<pre><code>df_list[0]
date ticker
2017-01-03 CRM 0.026957
MSFT 0.011428
2017-01-04 CRM 0.032575
MSFT 0.010142
2017-01-05 CRM 0.015580
Name: high_low, dtype: float64
</code></pre>
<h2>使用<code>concat</code>而不是<code>merge</code>:</h2>
<ul>
<li>很容易将<code>df_list</code>与<code>concat</code>结合起来</li>
</ul>
<pre><code>merged = pd.concat(df_list, axis=1).reset_index()
</code></pre>
<h2>最终数据帧:</h2>
<p><a href="https://i.stack.imgur.com/236t8.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/236t8.png" alt="enter image description here"/></a></p>
<h2>比较使用新代码和原始代码创建的数据帧:</h2>
<pre><code>merged_new == merged_old
</code></pre>
<p><a href="https://i.stack.imgur.com/JDR3h.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/JDR3h.png" alt="enter image description here"/></a></p>
<h2>最终代码:</h2>
<ul>
<li>与6行代码相比,只有3行代码,并且没有重复。你知道吗</li>
</ul>
<pre><code>used_cols = ['return', 'high_low', 'turnover']
df_list = [pd.concat((df1, df2), ignore_index=True, sort=False).groupby(['date', 'ticker'])[v].apply(lambda x: min(x, key=abs)) for v in used_cols]
merged = pd.concat(df_list, axis=1).reset_index()
</code></pre>