Матрица гистограмм, заказанная пандами

116
7

Поэтому у меня есть некоторые данные как таковые:

Epoch        Object User
1418409833 1 1
1418409834 1 2
1418409835 1234 1
1418409836 1234 1
1418409836 1589 2
1418409837 9 1
1418409838 9 2

Как преобразовать этот кадр в матрицу numpy:

[ 1 2 0 1
1 0 1 1]

Где каждая строка является пользователем, а каждый столбец - значением ячейки гистограммы. Таким образом, в этом случае пользователь 1 имеет 2 счета объекта 1234, поэтому второй индекс равен 2.

Однако обратите внимание, что здесь пользователь 2 не имеет объекта 1234 и, следовательно, ему нужен 0 в соответствующем столбце.

Вариант использования - для классификаторов scikit-learn.

спросил(а) 2021-01-25T19:02:07+03:00 4 месяца, 4 недели назад
1
Решение
77

Вы можете использовать groupby для группировки по User, value_counts для вычисления гистограммы и unstack для изменения результата:

In [13]: df
Out[13]:
Epoch Object User
0 1418409833 1 1
1 1418409834 1 2
2 1418409835 1234 1
3 1418409836 1234 1
4 1418409836 1589 2
5 1418409837 9 1
6 1418409838 9 2

In [14]: df.groupby(['User'])['Object'].value_counts().unstack(level=1).fillna(0)
Out[14]:
1 9 1234 1589
User
1 1 1 2 0
2 1 1 0 1

Затем вы можете получить доступ к атрибуту values для получения массива NumPy:

In [15]: df.groupby(['User'])['Object'].value_counts().unstack(level=1).fillna(0).values
Out[15]:
array([[ 1., 1., 2., 0.],
[ 1., 1., 0., 1.]])

ответил(а) 2021-01-25T19:02:07+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема