title: How to do join of multiindex dataframe with a single index dataframe?
body: <p>The single index of df1 matches with a sublevel of multiindex of df2. Both have the same columns. I want to copy all rows and columns of df1 to df2.</p>
  
  <p>It is similar to this thread:
  <a href="https://stackoverflow.com/questions/17451843/copying-a-single-index-dataframe-into-a-multiindex-dataframe">copying a single-index DataFrame into a MultiIndex DataFrame</a></p>
  
  <p>But that solution only work for one index value, the index 'a' in that case. I want to do this operation for all index of df1.</p>
  
  <pre><code>In [1]: import pandas as pd
  In [2]: import numpy as np
  In [3]: import itertools
  In [4]: inner = ('a','b')
  In [5]: outer = ((10,20), (1,2))
  In [6]: cols = ('one','two','three','four')
  In [7]: sngl = pd.DataFrame(np.random.randn(2,4), index=inner, columns=cols)
  In [8]: index_tups = list(itertools.product(*(outer + (inner,))))
  In [9]: index_mult = pd.MultiIndex.from_tuples(index_tups)
  In [10]: mult = pd.DataFrame(index=index_mult, columns=cols)
  In [11]: sngl
  Out[11]: 
          one       two     three      four
  a  2.946876 -0.751171  2.306766  0.323146
  b  0.192558  0.928031  1.230475 -0.256739
  
  In [12]: mult
  Out[12]: 
          one  two three four
  10 1 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
     2 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
  20 1 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
     2 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
  
  
  In [13]: mult.ix[(10,1)] = sngl
  
  In [14]: mult
  Out[14]: 
          one  two three four
  10 1 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
     2 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
  20 1 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
     2 a  NaN  NaN   NaN  NaN
       b  NaN  NaN   NaN  NaN
  </code></pre>
  
  <p>The solution given by @Jeff is</p>
  
  <pre><code>nm = mult.reset_index().set_index('level_2')
  nm.loc['a',sngl.columns] = sngl.loc['a'].values
  
           level_0  level_1        one        two     three        four
  level_2                                                              
  a             10        1  0.3738456 -0.2261926 -1.205177  0.08448757
  b             10        1        NaN        NaN       NaN         NaN
  a             10        2  0.3738456 -0.2261926 -1.205177  0.08448757
  b             10        2        NaN        NaN       NaN         NaN
  a             20        1  0.3738456 -0.2261926 -1.205177  0.08448757
  b             20        1        NaN        NaN       NaN         NaN
  a             20        2  0.3738456 -0.2261926 -1.205177  0.08448757
  b             20        2        NaN        NaN       NaN         NaN
  </code></pre>
  
  <p>I can't do this:</p>
  
  <pre><code>nm.loc[:,sngl.columns] = sngl.loc[:].values
  </code></pre>
  
  <p>It will raise ValueError: "cannot copy sequence with size X to array axis with dimension Y"</p>
  
  <p>I am currently using a loop. But this is not the pandas way.</p>