你可以使用get_level_values http://pandas.pydata.org/pandas-docs/dev/indexing.html#reconstructing-the-level-labels:
firsts = df1.index.get_level_values('first')
df1['value2'] = df2.loc[firsts].values
注:你是almost做一个join http://pandas.pydata.org/pandas-docs/dev/merging.html#joining-on-index在这里(除了 df1 是 MultiIndex)...所以可能有一种更简洁的方法来描述这一点...
.
在一个例子中(类似于你所拥有的):
df1 = pd.DataFrame([['a', 'x', 0.123], ['a','x', 0.234],
['a', 'y', 0.451], ['b', 'x', 0.453]],
columns=['first', 'second', 'value1']
).set_index(['first', 'second'])
df2 = pd.DataFrame([['a', 10],['b', 20]],
columns=['first', 'value']).set_index(['first'])
firsts = df1.index.get_level_values('first')
df1['value2'] = df2.loc[firsts].values
In [5]: df1
Out[5]:
value1 value2
first second
a x 0.123 10
x 0.234 10
y 0.451 10
b x 0.453 20