BUG: loc dropping levels when df has only one row
- [x] closes #10521
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Originally this case was dispatched to xs, which dispatched to ``_get_loc_level``, which raised if a slice is not ``slice(None, None)`` and went back to our original function. If the ``DataFrame`` contains only one row, ``_get_loc_level`` does not raise and hence we drop levels. 

I added len(self.obj) for performance reasons becasue I am not sure if the any check for slices is faster than supressing the IndexingError in general.
>  If the DataFrame contains only one row, _get_loc_level does not raise and hence we drop levels.

Should the _get_loc_level behavior correct? From reading the code I think this is the intended behavior, but not quite sure. It looks like jreback and I had different suggestions, but the theme to both is "can this be handled any earlier?"  have you ruled out the lower-level options? Sorry tough week at work. We can not call xs, because this would return wrong results. Do you mean mit earlier before reaching this point? Because I understood the suggestions as doing this deeper down in the calling stack > Do you mean mit earlier before reaching this point? Because I understood the suggestions as doing this deeper down in the calling stack

Deeper in the call stack is ideal, yes. @phofl are you of the opinion this is the best available approach?  you're pretty well versed in this part of the code and im inclined to trust your opinion. Forgot that one unfortunately, had 3 pretty busy weeks at work, but will be better now.

I am not 100% sure, but I tried this out a bit locally. We have to do this if condition somewhere before dispatching to xs, ``_get_label`` itself is not really an option, would be too ugly. Doing it in ``_handle_lowerdim_multi_index_axis0`` is possible, but would be quite ugly, because the if condition is the same case as raising ``TypeError`` or ``InvalidIndexError``. This would be quite ugly, also I think this is just unnecessary convolution for the other case where ``_handle_lowerdim_multi_index_axis0`` is called. Was a bit hasty. The problem only occurs for Objects with only one row and slices in indexer. Objects with more than one row have to go in there, no matter if the indexer has slices. > Was a bit hasty. The problem only occurs for Objects with only one row and slices in indexer. Objects with more than one row have to go in there, no matter if the indexer has slices.

this is very strange then, these must be hitting a different path that other types, no? maybe something different in the indexing engine itself? its pretty odd to special case like this. Looked into this again, the issue is with Series, the dimension of the MultiIndex should be reduced there, #6022 cc @jbrockmendel if any commetns. thanks @phofl 