Агрегированные значения одного столбца по классам во втором столбце с использованием 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)
Я сделал именно это.