我有一个包含 x
列的 numpy 数组,想要按照多列排序(其中一些可能是类型为 np.str_
的列)。我知道可以使用np.lexsort
实现此目的。
是否有办法指定每个排序列的升序/降序顺序?
例如:我知道可以通过以下方式按多列排序:
(已编辑以表示字符串列!)import numpy as np
arr = np.array([list("aaabbb"),[1,2,3,1,4,3],[1,2,3,4,6,6]]).T # Define arr
idx = np.lexsort([arr[:,1], arr[:,2]]) # sort by column 2 and then by column 1 (i.e. reversed order)
arr = arr[idx]
我也理解可以按照以下方式降序排序:
arr = arr[idx[::-1]]
这将导致第一个排序列(第二列)为降序,随后的列为升序。
但是,我如何指定要使第一个排序(第二列)按降序排列,而随后的排序(第一列)按降序排列,以便获得以下结果。
期望输出:
array([['b', 4, 6],
['b', 3, 6],
['b', 1, 4],
['a', 3, 3],
['a', 2, 2],
['a', 1, 1]]
基本上,对于我的例子,我正在寻找与以下内容等效的东西:
df = pd.DataFrame(arr, columns=list("abc"))
df.sort_values(by=["c","b"], ascending=[False, False])
通常情况下,我希望能够指定(i)要排序的列和(ii)每列的排序顺序(升序/降序)。