Используйте numpy.minimum
.Вам необходимо выполнить трансляцию, чтобы сохранить размеры столбца, чтобы не сравнивать по строкам весь столбец.
np.minimum(a, a[:, col, None])
MCVE
a = np.array([[1, 3, 1, 9, 4],
[2, 3, 7, 5, 5],
[9, 8, 8, 4, 5],
[6, 9, 5, 7, 9],
[9, 9, 1, 9, 1]])
col = 2 # array([1, 7, 8, 5, 1])
np.minimum(a, a[:, col, None])
array([[1, 1, 1, 1, 1],
[2, 3, 7, 5, 5],
[8, 8, 8, 4, 5],
[5, 5, 5, 5, 5],
[1, 1, 1, 1, 1]])