I have two dataframes. df1 is multi-indexed:
value
first second
a x 0.471780
y 0.774908
z 0.563634
b x -0.353756
y 0.368062
z -1.721840
and df2:
value
first
a 10
b 20
How can I merge the two data frames with only one of the multi-indexes, in this case the 'first' index? The desired output would be:
value1 value2
first second
a x 0.471780 10
y 0.774908 10
z 0.563634 10
b x -0.353756 20
y 0.368062 20
z -1.721840 20
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:
Then this looks like this in iPython:
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.
You could use
get_level_values
:Note: you are almost doing a
join
here (except the df1 is MultiIndex)... so there may be a neater way to describe this....
In an example (similar to what you have):
According to the documentation, as of pandas 0.14, you can simply join single-index and multiindex dataframes. It will match on the common index name. The
how
argument works as expected with'inner'
and'outer'
, though interestingly it seems to be reversed for'left'
and'right'
(could this be a bug?).