I have two dataframes. df1 is multi-indexed:
value
first second
a x 0.471780
y 0.774908
z 0.563634
b
As the .ix syntax is a powerful shortcut to reindexing, but in this case you are actually not doing any combined rows/column reindexing, this can be done a bit more elegantly (for my humble taste buds) with just using reindexing:
Preparation from hayden:
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'])
Then this looks like this in iPython:
In [4]: df1
Out[4]:
value1
first second
a x 0.123
x 0.234
y 0.451
b x 0.453
In [5]: df2
Out[5]:
value
first
a 10
b 20
In [7]: df2.reindex(df1.index, level=0)
Out[7]:
value
first second
a x 10
x 10
y 10
b x 20
In [8]: df1['value2'] = df2.reindex(df1.index, level=0)
In [9]: df1
Out[9]:
value1 value2
first second
a x 0.123 10
x 0.234 10
y 0.451 10
b x 0.453 20
The mnemotechnic for what level you have to use in the reindex method: It states for the level that you already covered in the bigger index. So, in this case df2 already had level 0 covered of the df1.index.