Есть ли реальный способ реализовать expand_grid () в PANDAS для 200+ категорий? - PullRequest
0 голосов
/ 29 января 2019

Следующий пример из Интернета для реализации функции expand_grid () содержит три переменные: рост (2 категории), вес (3 категории), пол (2 категории), всего 2 *3 * 2 = 12 категорий.

df={'height': [60, 70],
'weight': [100, 140, 180],
  'sex': ['Male', 'Female']}

Выполнение expand_grid для вышеуказанного объекта

expand_grid(df)

дает следующий результат:

       sex  weight  height
0     Male     100      60
1     Male     100      70
2     Male     140      60
3     Male     140      70
4     Male     180      60
5     Male     180      70
6   Female     100      60
7   Female     100      70
8   Female     140      60
9   Female     140      70
10  Female     180      60
11  Female     180      70

Я хотел бы сделать то же самое для набора данных сследующие колонки (категории):

Раса (9), Семейное положение (3), Пол (2), Возраст (2), Испанец (2).

Это 9 * 3 * 2 *2 * 2 = 216 категорий.

Я хотел бы что-то вроде следующего:

Race  Marital_Status Sex Age Hispanic
0 White Married Male Under_18 Hispanic
1 White Married Male Under_18 Non-Hispanic
2 White Married Male Over_18 Hispanic
3 White Married Male Over_18 Non-Hispanic
4 White Married Male Over_18 Hispanic
5 White Married Female Under_18 Hispanic
.
.
.
216 Asian Single Female Over_18 Non-Hispanic

Когда я пытаюсь запустить expand_grid (), системе не хватает памяти.

Мне сказали, что если есть способ, которым Python распознает тип данных (например, список, вектор и т. Д.) Перед этим, это будет быстрее и вычислительно дешевле.Есть ли способ реализовать это?

Большое спасибо!

1 Ответ

0 голосов
/ 29 января 2019
Пакет

PSL itertools может выполнить эту работу.

import itertools
import pandas as pd

cat = {
    'C1': ['A', 'B', 'C'],
    'C2': ['A', 'B'],
    'C3': ['A', 'B', 'C', 'D']
}

order = cat.keys()
pd.DataFrame(itertools.product(*[cat[k] for k in order]), columns=order)

Создает DataFrame со всеми возможными комбинациями (декартово произведение) модальных категорий:

   C1 C2 C3
0   A  A  A
1   A  A  B
2   A  A  C
[...]
22  C  B  C
23  C  B  D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...