Создание матрицы данных

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

a 1
a 1
a 1
b 2
b 2
c 3
d 4
d 4
d 4

Теперь мне нужно создать матрицу, которая имеет столбец для каждого участника и указывает, какие строки относятся к этому участнику, давая ей значение 1 против 0. У меня более 2000 участников, поэтому я не могу сделать это вручную или выписать все столбцы числа и что печатать где но надо создать правило.

Количество столбцов в моем файле будет числом в последней строке столбца 2 + 2 (в примере это должно быть 4 + 2 = 6). По сути, для каждой строки мне нужно напечатать 1 в столбцах, которые соответствуют (значение в столбце 2 (количество участников) + 2). Для этой строки все остальные столбцы получают значение 0. Таким образом, для строки 1 столбец (1 + 2 =) 3 получает 1, все остальные столбцы получают значение 0. Для строки 2 столбец (1 + 2 =) 3 получает 1, все остальные столбцы получают значение 0 и т. д.

Это должно выглядеть так:

a 1 1 0 0 0
a 1 1 0 0 0
a 1 1 0 0 0
b 2 0 1 0 0
b 2 0 1 0 0
c 3 0 0 1 0
d 4 0 0 0 1
d 4 0 0 0 1
d 4 0 0 0 1

Хотел бы я предоставить код, который я пробовал, но я не знаю, с чего начать.

Надеюсь, что кто-нибудь сможет помочь. Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

awk спешит на помощь!

$ awk 'NR==FNR{if (max<$2)max=$2; next} 
              {printf "%s %s", $1,$2; 
               for(i=1;i<=max;i++) printf " %s", i==$2; 
               print ""}' file{,}

a 1 1 0 0 0
a 1 1 0 0 0
a 1 1 0 0 0
b 2 0 1 0 0
b 2 0 1 0 0
c 3 0 0 1 0
d 4 0 0 0 1
d 4 0 0 0 1
d 4 0 0 0 1

с этим алгоритмом двойного сканирования последовательность и порядок не имеют значения.

Другие вопросы по теме