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

Function lexsort_indexer

pandas/core/sorting.py:302–369  ·  view source on GitHub ↗

Performs lexical sorting on a set of keys Parameters ---------- keys : Sequence[ArrayLike | Index | Series] Sequence of arrays to be sorted by the indexer Sequence[Series] is only if key is not None. orders : bool or list of booleans, optional Determines

(
    keys: Sequence[ArrayLike | Index | Series],
    orders=None,
    na_position: str = "last",
    key: Callable | None = None,
    codes_given: bool = False,
)

Source from the content-addressed store, hash-verified

300
301
302def lexsort_indexer(
303 keys: Sequence[ArrayLike | Index | Series],
304 orders=None,
305 na_position: str = "last",
306 key: Callable | None = None,
307 codes_given: bool = False,
308) -> npt.NDArray[np.intp]:
309 """
310 Performs lexical sorting on a set of keys
311
312 Parameters
313 ----------
314 keys : Sequence[ArrayLike | Index | Series]
315 Sequence of arrays to be sorted by the indexer
316 Sequence[Series] is only if key is not None.
317 orders : bool or list of booleans, optional
318 Determines the sorting order for each element in keys. If a list,
319 it must be the same length as keys. This determines whether the
320 corresponding element in keys should be sorted in ascending
321 (True) or descending (False) order. if bool, applied to all
322 elements as above. if None, defaults to True.
323 na_position : {'first', 'last'}, default 'last'
324 Determines placement of NA elements in the sorted list ("last" or "first")
325 key : Callable, optional
326 Callable key function applied to every element in keys before sorting
327 codes_given: bool, False
328 Avoid categorical materialization if codes are already provided.
329
330 Returns
331 -------
332 np.ndarray[np.intp]
333 """
334 from pandas.core.arrays import Categorical
335
336 if na_position not in ["last", "first"]:
337 raise ValueError(f"invalid na_position: {na_position}")
338
339 if isinstance(orders, bool):
340 orders = itertools.repeat(orders, len(keys))
341 elif orders is None:
342 orders = itertools.repeat(True, len(keys))
343 else:
344 orders = reversed(orders)
345
346 labels = []
347
348 for k, order in zip(reversed(keys), orders, strict=True):
349 k = ensure_key_mapped(k, key)
350 if codes_given:
351 codes = cast(np.ndarray, k)
352 n = codes.max() + 1 if len(codes) else 0
353 else:
354 cat = Categorical(k, ordered=True)
355 codes = cat.codes
356 n = len(cat.categories)
357
358 mask = codes == -1
359

Callers 7

_sort_tuplesFunction · 0.90
sort_valuesMethod · 0.90
quantileMethod · 0.90
argsortMethod · 0.90
sortlevelMethod · 0.90
test_lexsort_indexerMethod · 0.90
get_indexer_indexerFunction · 0.85

Calls 7

CategoricalClass · 0.90
ensure_key_mappedFunction · 0.85
repeatMethod · 0.45
maxMethod · 0.45
anyMethod · 0.45
whereMethod · 0.45
appendMethod · 0.45

Tested by 1

test_lexsort_indexerMethod · 0.72