擅长:python、mysql、java
<p>试试<code>pd.concat</code>:</p>
<pre><code>pd.concat([d.set_index(['geneID','geneName']).rename(columns={'count':f'df{i}'})
for i,d in enumerate([df1,df2])], axis=1
).fillna(0)
</code></pre>
<p>输出:</p>
<pre><code> df0 df1
geneID geneName
A123 ABC 202.0 0.0
B456 DEF 30.0 606.0
C789 GHI 265.0 777.0
X999 FOO 0.0 700.0
</code></pre>
<hr/>
<p>或者<code>concat</code>然后<code>pivot_table</code>:</p>
<pre><code>(pd.concat([d.assign(col=f'df{i}') for i,d in enumerate([df1,df2])])
.pivot_table(index=['geneID','geneName'], columns='col',
values='count', fill_value=0)
)
</code></pre>
<p>或者在<code>concat</code>中使用选项<code>key</code>的类似方法:</p>
<pre><code>(pd.concat([df1,df2], keys=['df1','df2'])
.reset_index(level=1,drop=True)
.set_index(['geneID','geneName'],append=True)
['count']
.unstack(level=0, fill_value=0)
)
</code></pre>