Замена двух последних столбцов выполняется следующим образом:
a = np.array([[1., 1., 0.],
[0., 4., 0.],
[8., 0., 8.],
[0., 0., 0.],
[5., 0., 0.],
[2., 2., 2.]])
result = a[:, [0, 2, 1]]
Итак, вам нужно рассчитать эти индексы [0, 2, 1]
на основе сумм столбцов.
Это дает вам суммы всех столбцов:
a.sum(axis=0) # array([16., 7., 10.])
и отсюда вы получаете индексы для сортировки:
np.argsort(np.array([16., 7., 10.])) # [1, 2, 0]
Вам нужно перевернуть его, чтобы получить порядок от наименьшего к низшему:
np.flip([1, 2, 0]) # [0, 2, 1]
Итак, все вместе, это:
result = a[:, np.flip(np.argsort(a.sum(axis=0)))]