Series.drop() with MultiIndex: inconsistent behaviour · Issue #8594 · pandas-dev/pandas (original) (raw)

The behaviour below occurs in versions '0.15.0rc1-21-g32c5016' and '0.14.1'.

When the label passed to the drop method of a Series is not in the axis:
(a) if the index is not a MultiIndex then an exception is raised (in most cases; see issue #8530)
(b) if the index is a MultiIndex then an exception is not raised; the original series is returned

Examples of current behaviour:
(a)

pd.Series([10, 20, 30], [1, 2, 3]).drop(7)

ValueError: labels [7] not contained in axis

(b)

pd.Series( [10, 20, 30], pd.MultiIndex( levels=[[1, 2, 3], [4, 5, 6]], labels=[[0, 1, 2], [0, 1, 2]], names=['a', 'b']) ).drop(7, level='a')

a b 1 4 10 2 5 20 3 6 30 dtype: int64

I propose that in (b) an exception be raised. Furthermore, an exception should be raised in (b) if (for instance) the label passed to drop had been 4, because although 4 is in the axis, it is not in the specified level.

The exception message in (b) would have to refer to the level, e.g.:

ValueError: labels [7] not contained in level