回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有两个pandas数据帧,如下所示:</p>
<pre><code>df1 = pd.DataFrame({('Q1', 'SubQ1'):[1, 2, 3], ('Q1', 'SubQ2'):[1, 2, 3], ('Q2', 'SubQ1'):[1, 2, 3]})
df1['ID'] = ['a', 'b', 'c']
df2 = pd.DataFrame({'item_id': ['a', 'b', 'c'], 'url':['a.com', 'blah.com', 'company.com']})
</code></pre>
<p><code>df1</code>:</p>
^{pr2}$
<p><code>df2</code>:</p>
<pre><code> item_id url
0 a a.com
1 b blah.com
2 c company.com
</code></pre>
<p>请注意,<code>df1</code>有一些列具有层次索引(例如<code>('Q1', 'SubQ1')</code>),有些列只有普通索引(例如<code>ID</code>)。在</p>
<p>我想合并<code>ID</code>和<code>item_id</code>字段上的这两个数据帧。使用:</p>
<pre><code>result = pd.merge(df1, df2, left_on='ID', right_on='item_id')
</code></pre>
<p>给出:</p>
<pre><code> (Q1, SubQ1) (Q1, SubQ2) (Q2, SubQ1) (ID, ) item_id url
0 1 1 1 a a a.com
1 2 2 2 b b blah.com
2 3 3 3 c c company.com
</code></pre>
<p>如您所见,合并本身运行良好,但MultiIndex已丢失,并已恢复为元组。我尝试使用<code>pd.MultiIndex.from_tuples</code>重新创建多重索引,如:</p>
<pre><code>result.columns = pd.MultiIndex.from_tuples(result)
</code></pre>
<p>但是这会导致<code>item_id</code>和<code>url</code>列的问题,它们只使用名称的前两个字符:</p>
<pre><code> Q1 Q2 ID i u
SubQ1 SubQ2 SubQ1 t r
0 1 1 1 a a a.com
1 2 2 2 b b blah.com
2 3 3 3 c c company.com
</code></pre>
<p>将<code>df2</code>中的列转换为一个元素元组(即<code>('item_id',)</code>而不仅仅是<code>'item_id'</code>)没有任何区别。在</p>
<p>如何合并这两个数据帧并正确保存多重索引?或者,我如何获得merge的结果并返回到具有正确多重索引的列,而不会混淆<code>item_id</code>和{<cd10>}列的名称?在</p>