У меня есть набор данных в этом общем формате:
group_id item_id zone time
1 1 1 1
1 3 4 1
2 6 3 1
2 2 4 1
3 1 1 1
1 2 3 2
1 6 2 2
2 8 1 2
2 5 2 2
3 1 1 2
Я хочу создать новый столбец для каждого потенциального значения в столбце зоны, а затем назначить ему значение истинности, если оно представляет эту строку. Скажем, было четыре потенциальных зоны, перечисленных в names = ['zone_1', 'zone_2', 'zone_3', 'zone_4']
. Вывод должен выглядеть примерно так:
group_id item_id time zone_1 zone_2 zone_3 zone_4
1 1 1 1 0 0 0
1 3 1 0 0 0 1
2 6 1 0 0 1 0
2 2 1 0 0 0 1
3 1 1 1 0 0 0
1 2 2 0 0 1 0
1 6 2 0 1 0 0
2 8 2 1 0 0 0
2 5 2 0 1 0 0
3 1 2 1 0 0 0
Я не уверен, как лучше всего этого добиться. Я могу создать новые столбцы прямо из списка имен. Я мог бы создать массив для зоны (например, значение зоны 3 заменить на [0,0,1,0]), затем pd.explode для 'zone' с последующим поворотом, но замена строка за строкой интенсивна и не очень pandas -подобный. Я ценю любые другие предложения.
Может быть важно отметить, что group_id + item_id + time создают уникальный элемент (нет двух одинаковых элементов на всех трех значениях).
Спасибо Вы!
РЕДАКТИРОВАТЬ: Чтобы уточнить, как мне было неясно: может быть больше потенциальных зон, чем уникально появляется в столбце. Например, вышеуказанный набор данных может быть связан с names = ['zone_1', 'zone_2', 'zone_3', 'zone_4', 'zone_5]
. Хотя нет ни одного случая, когда зона 5 появляется в кадре данных, ему также нужен новый столбец. В идеале решение также создает для этого столбец (для более поздних целей визуализации). Выход в этом случае будет:
group_id item_id time zone_1 zone_2 zone_3 zone_4 zone_5
1 1 1 1 0 0 0 0
1 3 1 0 0 0 1 0
2 6 1 0 0 1 0 0
2 2 1 0 0 0 1 0
3 1 1 1 0 0 0 0
1 2 2 0 0 1 0 0
1 6 2 0 1 0 0 0
2 8 2 1 0 0 0 0
2 5 2 0 1 0 0 0
3 1 2 1 0 0 0 0