Примечание: я пока не могу комментировать (из-за того, что я новый пользователь).
Какова мощность ваших "item1", "item2" и "item3"
В частности, какие значения дает следующий отпечаток?
k1 = df.item1.nunique()
k2 = df.item2.nunique()
k3 = df.item3.nunique()
k = k1 * k2 * k3
print (k1, k2, k3)
Одно горячее кодирование в основном создает очень разреженную матрицу с тем же числом строк, что и ваш исходный кадр данных, с k числом дополнительных столбцов, где k = произведение трех чисел, напечатанных выше.
Поэтому, если ваши 3 числа большие, вы получаете ошибку памяти.
Единственные решения:
(1) увеличить вашу память или
(2) ввести иерархию среди категорий и использовать категории более высокого уровня для ограничения k.