Векторизация данных (get_dummies 3 столбца в матрицу) - PullRequest
0 голосов
/ 09 июня 2018

У меня есть задача, которая должна быть оптимально решена.У меня есть 50 категорий и 10 000 магазинов, которые могут иметь товары из этих категорий, но все это в 3 столбцах

id_store  category    qnty
    1         1        50
    1         2        32
    1         15       44
    2         1        333
    2         4        33
    2         5        15
    2         15       12
    2         35       14
    3         3        14
    ....     

Из этого необходимо сделать матрицу, где row - id_store, а columns - категорияи их пересечение - qnty:

id_shop/category  1   2   3   4 ...15  16... 35   36
   1              50  32  0   0    44  0     0    0
   2              333 0   0   33   12  0     14   0
   3              0   0   14  0    0   0     0    0     

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вы можете использовать скудные разреженные матрицы для этого.Документация здесь .

D = sp.sparse.coo_matrix((qnty,(id_store,category))) # creates a sparse matrix from numpy vectors (np.ndarray)

Если вы хотите сделать его плотным np.ndarray, просто используйте:

D = D.toarray()

Или, если вы предпочитаете numpy np.matrix тип, просто используйте:

D = D.todense()
0 голосов
/ 09 июня 2018

Вы можете использовать pandas, это библиотека, специально разработанная для таких фреймов данных, как ваша.Из документации панд я нашел этот пример:

>>> df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
...                            'two'],
...                    'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
...                    'baz': [1, 2, 3, 4, 5, 6],
...                    'zoo': ['x', 'y', 'z', 'q', 'w', 't']})

-

>>> df
    foo   bar  baz  zoo
0   one   A    1    x
1   one   B    2    y
2   one   C    3    z
3   two   A    4    q
4   two   B    5    w
5   two   C    6    t

-

>>> df.pivot(index='foo', columns='bar', values='baz')
bar  A   B   C
foo
one  1   2   3
two  4   5   6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...