Description
I have the following DataFrame:
market_caps
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 409938 entries, (20111230, '00036110') to (20121019, 'Y8564W10')
Data columns:
market_cap 409938 non-null values
dtypes: float64(1)
market_caps.index.names
['date', 'security_id']
I want to get a cross-section by date. The following works just fine, implicitly slicing on the first level of the MultiIndex:
market_caps.xs(20111230)
<class 'pandas.core.frame.DataFrame'>
Index: 1993 entries, 00036110 to Y8564W10
Data columns:
market_cap 1993 non-null values
dtypes: float64(1)
However, if I try to explicitly declare the first level, I get an exception:
market_caps.xs(20111230, level='date')
Exception Traceback (most recent call last)
in ()
----> 1 market_caps.xs(20111230, level='date')C:\Python27\lib\site-packages\pandas\core\frame.pyc in xs(self, key, axis, level, copy)
1983
1984 result = self.ix[indexer]
-> 1985 setattr(result, result._get_axis_name(axis), new_ax)
1986 return result
1987C:\Python27\lib\site-packages\pandas\core\frame.pyc in setattr(self, name, value)
1780 existing = getattr(self, name)
1781 if isinstance(existing, Index):
-> 1782 super(DataFrame, self).setattr(name, value)
1783 elif name in self.columns:
1784 self[name] = valueC:\Python27\lib\site-packages\pandas\lib.pyd in pandas.lib.AxisProperty.set (pandas\src\tseries.c:97451)()
C:\Python27\lib\site-packages\pandas\core\generic.pyc in _set_axis(self, axis, labels)
461
462 def _set_axis(self, axis, labels):
--> 463 self._data.set_axis(axis, labels)
464 self._clear_item_cache()
465C:\Python27\lib\site-packages\pandas\core\internals.pyc in set_axis(self, axis, value)
516 if len(value) != len(cur_axis):
517 raise Exception('Length mismatch (%d vs %d)'
--> 518 % (len(value), len(cur_axis)))
519 self.axes[axis] = _ensure_index(value)
520Exception: Length mismatch (1993 vs 0)
Slicing on the second level works just fine:
market_caps.xs('00036110', level='security_id')
<class 'pandas.core.frame.DataFrame'>
Int64Index: 204 entries, 20111230 to 20121019
Data columns:
market_cap 204 non-null values
dtypes: float64(1)
Is it supposed to be like this?