У меня есть фрейм данных с ~ 300 столбцами, имеющими столбцы от «Prod1» до «Prod300», как показано ниже:
ID Product Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
01 1 0 0 0 0 0 0 0
01 2 0 0 0 0 0 0 0
01 3 0 0 0 0 0 0 0
02 1 0 0 0 0 0 0 0
02 4 0 0 0 0 0 0 0
03 3 0 0 0 0 0 0 0
04 6 0 0 0 0 0 0 0
То, что я хочу, это просто заполнить соответствующий столбец «Prod» в соответствии со значением в столбце «Product», т. Е. Ниже df как Output -
ID Product Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
01 1 1 0 0 0 0 0 0
01 2 0 1 0 0 0 0 0
01 3 0 0 1 0 0 0 0
02 1 1 0 0 0 0 0 0
02 4 0 0 0 1 0 0 0
03 3 0 0 1 0 0 0 0
04 6 0 0 0 0 0 1 0
Дело в том, что я знаю, что у меня всего 300 продуктов, но я не могу получить все значения в столбце «Продукт», и я хочу сохранить столбец «Prod7», даже если его нет в « Столбец продукта и имеет все значения = 0.
Итак, я не могу использовать pivot_table ...
Я попытался перебрать столбец «Продукт», как показано ниже:
for row in range ( len( df['Product'])) :
df['Prod' + str( df['Product'][row] ) ][row] = 1
То, что я делаю выше, - это просмотр значений в столбце «Продукт» одно за другим, а затем заполнение 1 в соответствующем столбце и той же строке.
Кроме того, поскольку существует 300 столбцов от Prod1 до Prod300, я бы не хотел делать это столбец за столбцом, как показано ниже:
df['Prod1'] = np.where(df['Product'] == 1, 1 , 0)
df['Prod2'] = np.where(df['Product'] == 2, 1 , 0)
df['Prod3'] = np.where(df['Product'] == 3, 1 , 0)
........
........
Теперь приведенные выше коды работают, но я знаю, что вы не должны использовать циклы, поскольку они медленные.
Может быть, потому что я новичок в python, и это действительно просто, но любая альтернатива будет высоко ценится. Я также обеспокоен временем выполнения кода, поэтому все, что быстрее, чем раньше, будет очень полезным ...