title: `.loc` and `.iloc` with MultiIndex'd DataFrame
body: <p>When indexing a MultiIndex-ed DataFrame, it seems like <code>.iloc</code> assumes you're referencing the "inner level" of the index while <code>.loc</code> looks at the outer level.</p>
  
  <p>For example:</p>
  
  <pre><code>np.random.seed(123)
  iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
  idx = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
  df = pd.DataFrame(np.random.randn(8, 4), index=idx)
  
  # .loc looks at the outer index:
  
  print(df.loc['qux'])
  # df.loc['two'] would throw KeyError
                0        1        2        3
  second                                    
  one    -1.25388 -0.63775  0.90711 -1.42868
  two    -0.14007 -0.86175 -0.25562 -2.79859
  
  # while .iloc looks at the inner index:
  
  print(df.iloc[-1])
  0   -0.14007
  1   -0.86175
  2   -0.25562
  3   -2.79859
  Name: (qux, two), dtype: float64
  </code></pre>
  
  <p>Two questions:</p>
  
  <p>Firstly, why is this?  Is it a deliberate design decision?</p>
  
  <p>Secondly, can I use <code>.iloc</code> to reference the outer level of the index, to yield the result below?  I'm aware I could first find the last member of the index with <code>get_level_values</code> and then <code>.loc</code>-index with that, but wandering if it can be done more directly, either with funky <code>.iloc</code> syntax or some existing function designed specifically for the case.</p>
  
  <pre><code># df.iloc[-1]
  qux   one     0.89071  1.75489  1.49564  1.06939
        two    -0.77271  0.79486  0.31427 -1.32627
  </code></pre>