У меня есть датафрейм пользователей, которые приобрели различные предметы. Я хочу разбить этот список значений на отдельные столбцы и иметь двоичный флаг для пользователей, которые приобрели этот элемент.
Ввод:
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" или встроенная функция, которая делает это?