Pandas Список значений для двоичных столбцов - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть датафрейм пользователей, которые приобрели различные предметы. Я хочу разбить этот список значений на отдельные столбцы и иметь двоичный флаг для пользователей, которые приобрели этот элемент.

Ввод:

       A           B
0  James  [123, 456]
1   Mary       [123]
2   John  [456, 789]

Ожидается Вывод:

       A           B  123  456  789
0  James  [123, 456]    1    1    0
1   Mary       [123]    1    0    0
2   John  [456, 789]    0    1    1

То, что я пробовал (шаг за шагом)

df['B'].explode() - мой первый шаг:

0    123
0    456
1    123
2    456
2    789

Использование get_dummies() pd.get_dummies(df['B'].explode()):

   123  456  789
0    1    0    0
0    0    1    0
1    1    0    0
2    0    1    0
2    0    0    1

Объединить вместе по индексу df.join(pd.get_dummies(df['B'].explode())):

       A           B  123  456  789
0  James  [123, 456]    1    0    0
0  James  [123, 456]    0    1    0
1   Mary       [123]    1    0    0
2   John  [456, 789]    0    1    0
2   John  [456, 789]    0    0    1

Проблема:

Теперь мне просто нужно сгруппировать и объединить. Однако, поскольку миллионы и миллионы рядов и клиенты покупают сотни продуктов, этот метод объединения / объединения крайне неэффективен. Есть ли более "pandas-Friendly" или встроенная функция, которая делает это?

1 Ответ

2 голосов
/ 07 апреля 2020

вы можете заменить pd.get_dummies(df['B'].explode() на pd.get_dummies(df.B.explode()).sum(level=0) и присоединиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...