numpy.lexsort
numpy.lexsort(keys, axis=-1)
使用键序列执行间接稳定排序。
给定多个可以在电子表格中解释为列的排序键,lexsort
返回一个整数索引数组,该数组描述了按多个列排序的顺序。 序列中的最后一个键用于主排序顺序,倒数第二个键用于辅助排序顺序,依此类推。 keys参数
必须是可以转换为相同形状的数组的对象序列。 如果为keys参数提供了2D数组,则将其行解释为排序键,并根据最后一行,倒数第二行等进行排序。
参数 : | keys : 要排序的 最后一列(如果键是2D数组,则为行)是主排序键。 axis : 要间接排序的轴。 默认情况下,对最后一个轴进行排序。 |
返回值 : | indices :(N,) ndarray of ints 沿着指定的轴对键进行排序的索引数组。 |
例子
1)按两个字段排序(先按姓名,姓名相同时按分数)
import numpy as np names = np.array(['Tom', 'Jane', 'Bob', 'Jane']) scores = np.array([80, 90, 85, 85]) # 按名字升序,名字相同时按分数升序 indices = np.lexsort((scores, names)) print(indices) print(names[indices]) print(scores[indices])
2)对二维数组的列排序
import pandas as pd import numpy as np data = np.array([[1, 3, 1], [2, 2, 3]]) # 先按第一行排序(主键),相同情况下按第二行排序(次键) idx = np.lexsort((data[1], data[0])) print(idx) # 排序后的列索引 print(data[:, idx]) # 排序后的数组