<p>如果第一个<code>df1</code>中的<code>Item</code>不是索引,第二个<code>Date</code>不是索引,则解决方法:</p>
<pre><code>print (df1.index)
RangeIndex(start=0, stop=4, step=1)
print (df2.index)
RangeIndex(start=0, stop=3, step=1)
</code></pre>
<p>按<code>Item</code>创建索引,首先转置和<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.add_suffix.html" rel="nofollow noreferrer">^{<cd5>}</a>,然后<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html" rel="nofollow noreferrer">^{<cd6>}</a>,最后按<code>.</code>之前第三列的值排序:</p>
<pre><code>df11 = df1.set_index('Item').T.add_suffix('.Profit')
df = df2.merge(df11, left_on='Date', right_index=True).reset_index()
cols = sorted(df.columns[2:], key=lambda x: x.split('.')[0])
df = df[df.columns[:2].tolist() + cols]
print (df)
Date Item A.unit A.Profit B.Unit B.Profit C.Unit C.Profit D.Unit \
0 10/11 A,D 5 30 0 10 0 5 12
1 11/11 A,B,C 10 12 10 5 5 25 0
2 12/11 A 20 10 0 15 0 10 0
D.Profit
0 15
1 10
2 18
</code></pre>
<p>如果第一列是索引:</p>
<pre><code>print (df1.index)
Index(['A', 'B', 'C', 'D'], dtype='object', name='Item')
print (df2.index)
Index(['10/11', '11/11', '12/11'], dtype='object', name='Date')
df11 = df1.T.add_suffix('.Profit')
df = df2.merge(df11, left_index=True, right_index=True).reset_index()
cols = sorted(df.columns[2:], key=lambda x: x.split('.')[0])
df = df[df.columns[:2].tolist() + cols]
</code></pre>