Агрегированные значения одного столбца по классам во втором столбце с использованием numpy

У меня есть массив массивов с формой N,2 и N>10000. В первом столбце у меня есть, например, 6 значений класса (например, 0,0,0,2,0,4,0,6,0,8,1,0), во втором столбце у меня есть значения с плавающей запятой. Теперь я хочу вычислить среднее значение второго столбца для всех разных классов первого столбца, в результате чего получается 6 средних значений по одному для каждого класса.

Есть ли простой способ сделать это, чтобы избежать ручных циклов, особенно если N очень большое?

2 ответа

В чистом виде вы должны сделать что-то вроде:

unq, idx, cnt = np.unique(arr[:, 0], return_inverse=True,
                          return_counts=True)
avg = np.bincount(idx, weights=arr[:, 1]) / cnt

Я скопировал ответ Уоррена сюда, так как он лучше всего решает мою проблему, и я хочу проверить его как решенный:

Это операция "группирование / агрегация". Вопрос в том, насколько это похоже на получение медианы определенных строк массива на основе индекса.... Вы также можете использовать scipy.ndimage.labeled_comprehension, как там предлагается, но вам придется преобразовать первый столбец в целые числа (например, idx = (5*data[:, 0]). Astype(int)

Я сделал именно это.

Другие вопросы по тегам