Esta es la forma más simple y general de hacer lo que quiera. (Usé tres matrices aquí, pero esto funcionará en matrices de cualquier forma, ya sean dos columnas o doscientas).
import numpy as NP
fnx = lambda : NP.random.randint(0, 10, 6)
a, b, c = fnx(), fnx(), fnx()
abc = NP.column_stack((a, b, c))
keys = (abc[:,0], abc[:,1]) # sort on 2nd column, resolve ties using 1st col
indices = NP.lexsort(keys) # create index array
ab_sorted = NP.take(abc, indices, axis=0)
Una peculiaridad w/lexsort es que usted tiene que indique las claves en orden inverso, es decir, poner la segunda clave primaria y su clave secundaria en primer lugar. En mi ejemplo, quiero ordenar usando la segunda columna como la clave principal, así que la enumero en segundo lugar; la primera columna solo resuelve lazos, pero está en primer lugar).
@YGA, ¿su matriz de entrada "a" tendrá valores no exclusivos? Si es así, ¿cómo te gustaría que el género se comporte en ese caso? ¿Orden arbitraria? Tipo estable? ¿Secuencia secundaria usando los valores correspondientes en la matriz "b"? –