MCPcopy
hub / github.com/pandas-dev/pandas / _drop_level_numbers

Method _drop_level_numbers

pandas/core/indexes/base.py:2304–2359  ·  view source on GitHub ↗

Drop MultiIndex levels by level _number_, not name.

(self, levnums: list[int])

Source from the content-addressed store, hash-verified

2302
2303 @final
2304 def _drop_level_numbers(self, levnums: list[int]):
2305 """
2306 Drop MultiIndex levels by level _number_, not name.
2307 """
2308
2309 if not levnums and not isinstance(self, ABCMultiIndex):
2310 return self
2311 if len(levnums) >= self.nlevels:
2312 raise ValueError(
2313 f"Cannot remove {len(levnums)} levels from an index with "
2314 f"{self.nlevels} levels: at least one level must be left."
2315 )
2316 # The two checks above guarantee that here self is a MultiIndex
2317 self = cast("MultiIndex", self)
2318
2319 new_levels = list(self.levels)
2320 new_codes = list(self.codes)
2321 new_names = list(self.names)
2322
2323 for i in levnums:
2324 new_levels.pop(i)
2325 new_codes.pop(i)
2326 new_names.pop(i)
2327
2328 if len(new_levels) == 1:
2329 lev = new_levels[0]
2330
2331 if len(lev) == 0:
2332 # If lev is empty, lev.take will fail GH#42055
2333 if len(new_codes[0]) == 0:
2334 # GH#45230 preserve RangeIndex here
2335 # see test_reset_index_empty_rangeindex
2336 result = lev[:0]
2337 else:
2338 res_values = algos.take(lev._values, new_codes[0], allow_fill=True)
2339 # _constructor instead of type(lev) for RangeIndex compat GH#35230
2340 result = lev._constructor._simple_new(res_values, name=new_names[0])
2341 else:
2342 # set nan if needed
2343 mask = new_codes[0] == -1
2344 result = new_levels[0].take(new_codes[0])
2345 if mask.any():
2346 result = result.putmask(mask, np.nan)
2347
2348 result._name = new_names[0]
2349
2350 return result
2351 else:
2352 from pandas.core.indexes.multi import MultiIndex
2353
2354 return MultiIndex(
2355 levels=new_levels,
2356 codes=new_codes,
2357 names=new_names,
2358 verify_integrity=False,
2359 )
2360
2361 # --------------------------------------------------------------------

Callers 9

droplevelMethod · 0.95
_stack_multi_columnsFunction · 0.80
stack_v3Function · 0.80
stack_reshapeFunction · 0.80
maybe_mi_droplevelsMethod · 0.80
maybe_droplevelsFunction · 0.80
result_index_and_idsMethod · 0.80
_ob_index_and_idsMethod · 0.80

Calls 6

MultiIndexClass · 0.90
popMethod · 0.45
takeMethod · 0.45
_simple_newMethod · 0.45
anyMethod · 0.45
putmaskMethod · 0.45

Tested by

no test coverage detected