擅长:python、mysql、java
<p>可以使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.cumcount.html" rel="nofollow noreferrer">^{<cd1>}</a>作为<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.merge.html" rel="nofollow noreferrer">^{<cd2>}</a>的helper counter列,并使用left join,第二个数据帧也由<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.melt.html" rel="nofollow noreferrer">^{<cd3>}</a>重塑:</p>
<pre><code>dfA['groups'] = dfA.groupby(['a','b']).cumcount()
dfM1 = dfM.melt(['X','Y'], value_name='e')
dfM1['groups'] = dfM1.groupby(['X','Y']).cumcount()
print (dfM1)
X Y variable e groups
0 N M d1 0.1 0
1 S F d1 1.0 0
2 N M d2 0.2 1
3 S F d2 2.0 1
4 N M d3 0.3 2
5 S F d3 3.0 2
d = {'X':'a', 'Y':'b'}
df = (dfA.merge(dfM1.rename(columns=d), on=['a','b', 'groups'], how='left')
.drop(['variable','groups'],axis=1))
print (df)
a b c d e
0 N M 1 3 0.1
1 S F 2 4 1.0
2 S F 2 4 2.0
</code></pre>