Closed
Description
Pandas version checks
-
I have checked that this issue has not already been reported.
-
I have confirmed this bug exists on the latest version of pandas.
-
I have confirmed this bug exists on the master branch of pandas.
Reproducible Example
In [73]: df = pd.DataFrame(columns=['brand'], dtype=np.int64, index=pd.RangeIndex(0,0,1))
In [74]: df = df.set_index([df.index, 'brand'])
In [75]: list(df.index.levels)
Out[75]:
[RangeIndex(start=0, stop=0, step=1),
Int64Index([], dtype='int64', name='brand')]
In [76]: df.reset_index([1], drop=True)
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-76-863d90e52ed0> in <module>
----> 1 df.reset_index([1], drop=True)
~/.pyenv/versions/3.8.6/envs/beam/lib/python3.8/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
309 stacklevel=stacklevel,
310 )
--> 311 return func(*args, **kwargs)
312
313 return wrapper
~/.pyenv/versions/3.8.6/envs/beam/lib/python3.8/site-packages/pandas/core/frame.py in reset_index(self, level, drop, inplace, col_level, col_fill)
5789 level = [self.index._get_level_number(lev) for lev in level]
5790 if len(level) < self.index.nlevels:
-> 5791 new_index = self.index.droplevel(level)
5792
5793 if not drop:
~/.pyenv/versions/3.8.6/envs/beam/lib/python3.8/site-packages/pandas/core/indexes/base.py in droplevel(self, level)
2048 levnums = sorted(self._get_level_number(lev) for lev in level)[::-1]
2049
-> 2050 return self._drop_level_numbers(levnums)
2051
2052 @final
~/.pyenv/versions/3.8.6/envs/beam/lib/python3.8/site-packages/pandas/core/indexes/base.py in _drop_level_numbers(self, levnums)
2081 # If lev is empty, lev.take will fail GH#42055
2082 res_values = algos.take(lev._values, new_codes[0], allow_fill=True)
-> 2083 result = type(lev)._simple_new(res_values, name=new_names[0])
2084 else:
2085 # set nan if needed
~/.pyenv/versions/3.8.6/envs/beam/lib/python3.8/site-packages/pandas/core/indexes/range.py in _simple_new(cls, values, name)
169 result = object.__new__(cls)
170
--> 171 assert isinstance(values, range)
172
173 result._range = values
AssertionError:
Issue Description
This very specific use-case (dropping an index using reset_index
s.t. only a RangeIndex remains) is failing the assertion here:
pandas/pandas/core/indexes/range.py
Line 171 in 47081ff
I've only observed this behavior in 1.4.0rc1. I've verified this code works fine in previous pandas versions, but I haven't tested with master.
Expected Behavior
Pandas should drop index 1 and retain index 0 without raising an error.
Installed Versions
1.4.0rc1