IIUC, вы можете использовать pd.get_dummies
после удаления дубликатов, что будет быстрее и приведет к более чистому коду, чем итеративный:
df.drop_duplicates().join(pd.get_dummies(df.drop_duplicates()))
label label_label1 label_label11 label_label23 label_label3
0 label1 1 0 0 0
2 label23 0 0 1 0
3 label3 0 0 0 1
4 label11 0 1 0 0
Вы можете избавитьсяиз этих label
префиксов и подчеркиваний с использованием аргументов prefix
и prefix_sep
:
df.drop_duplicates().join(pd.get_dummies(df.drop_duplicates(),
prefix='', prefix_sep=''))
label label1 label11 label23 label3
0 label1 1 0 0 0
2 label23 0 0 1 0
3 label3 0 0 0 1
4 label11 0 1 0 0
Редактировать : со вторым столбцом, то есть:
>>> df
label second_column
0 label1 a
1 label1 b
2 label23 c
3 label3 d
4 label11 e
Просто позвоните pd.get_dummies
только на столбец метки:
df.drop_duplicates('label').join(pd.get_dummies(df['label'].drop_duplicates(),
prefix='', prefix_sep=''))
label second_column label1 label11 label23 label3
0 label1 a 1 0 0 0
2 label23 c 0 0 1 0
3 label3 d 0 0 0 1
4 label11 e 0 1 0 0
Но тогда вы избавляетесь от строк без дубликатов, и я не думаю, что это то, что вы хотите (если только яошибиться).Если нет, просто опустите отбрасывание дубликатов вызовов:
df.join(pd.get_dummies(df['label'], prefix='', prefix_sep=''))
label second_column label1 label11 label23 label3
0 label1 a 1 0 0 0
1 label1 b 1 0 0 0
2 label23 c 0 0 1 0
3 label3 d 0 0 0 1
4 label11 e 0 1 0 0