<p>将<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.merge.html" rel="nofollow noreferrer">^{<cd1>}</a>与left join和参数<code>suffixes</code>一起使用,lastr remove original columns<code>email address</code>和{<cd4>}(with <code>_</code>):</p>
<pre><code>df1 = pd.DataFrame({
'username':list('abccdd'),
'email address':[''] * 6,
'phone number':[''] * 6,
'duration':[5,3,6,9,2,4],
})
print (df1)
username email address phone number duration
0 a 5
1 b 3
2 c 6
3 c 9
4 d 2
5 d 4
df2 = pd.DataFrame({
'username':list('abcd'),
'email address':['a@a.sk','b@a.sk','c@a.sk','d@a.sk'],
'phone number':range(4)
})
print (df2)
username email address phone number
0 a a@a.sk 0
1 b b@a.sk 1
2 c c@a.sk 2
3 d d@a.sk 3
</code></pre>
<hr/>
^{pr2}$
<p>另一种解决方案是使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.difference.html" rel="nofollow noreferrer">^{<cd6>}</a>表示未在列表中定义的所有列名称,使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html" rel="nofollow noreferrer">^{<cd7>}</a>表示与列的<code>df1</code>中相同的顺序:</p>
<pre><code>c = df1.columns.difference(['email address','phone number'])
df = df1[c].merge(df2, on='username', how='left').reindex(columns=df1.columns)
print (df)
username email address phone number duration
0 a a@a.sk 0 5
1 b b@a.sk 1 3
2 c c@a.sk 2 6
3 c c@a.sk 2 9
4 d d@a.sk 3 2
5 d d@a.sk 3 4
</code></pre>