Так как вы использовали pop в своем примере, я подумал, что вы можете не захотеть повторяться в каждом столбце.numpy.random.shuffle перемешивает элементы на месте.
>>> M = N.repeat(N.arange(1,11), 5).reshape(10,-1)
>>> M
array([[ 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3],
[ 4, 4, 4, 4, 4],
[ 5, 5, 5, 5, 5],
[ 6, 6, 6, 6, 6],
[ 7, 7, 7, 7, 7],
[ 8, 8, 8, 8, 8],
[ 9, 9, 9, 9, 9],
[10, 10, 10, 10, 10]])
>>> for i in range(5):
... N.random.shuffle(M[:,i])
>>> M
array([[ 3, 9, 7, 9, 2],
[ 5, 4, 2, 5, 3],
[ 8, 8, 8, 1, 4],
[ 1, 2, 6, 10, 8],
[ 2, 1, 9, 2, 5],
[ 7, 7, 10, 7, 1],
[ 4, 3, 5, 8, 9],
[ 6, 5, 4, 4, 7],
[10, 10, 3, 6, 6],
[ 9, 6, 1, 3, 10]])
>>>