How about something like that? Notice that I shuffled the first column.
>>> a = np.arange(0,36).reshape((6,6)).T; a[2,0] = 4; a[4,0] = 2; >>> a array([[ 0, 6, 12, 18, 24, 30], [ 1, 7, 13, 19, 25, 31], [ 4, 8, 14, 20, 26, 32], [ 3, 9, 15, 21, 27, 33], [ 2, 10, 16, 22, 28, 34], [ 5, 11, 17, 23, 29, 35]]) >>> a[np.arange(a.shape[1])[None,:] >= a[:,0,None]] = 0 >>> a array([[ 0, 0, 0, 0, 0, 0], [ 1, 0, 0, 0, 0, 0], [ 4, 8, 14, 20, 0, 0], [ 3, 9, 15, 0, 0, 0], [ 2, 10, 0, 0, 0, 0], [ 5, 11, 17, 23, 29, 0]])