#python #pandas
#python #pandas
Вопрос:
Предположим, что существует серия pandas (например, следующая)
1 A
2 C
3 A
4 B
5 C
Существует также список элементов, например [A, B, C, D]. Цель состоит в том, чтобы получить фрейм данных со столбцами этого списка и теми же строками, что и в серии, и каждая ячейка представляет собой логическое значение, которое указывает, равно ли значение в серии значению столбца. В моем примере это было бы следующим:
A B C D
1 True False False False
2 False False True False
3 True False False False
4 False True False False
5 False False True False
Конечно, этого можно достичь с помощью простого цикла for (что-то вроде этого:)
for i in the_list:
df[i] = the_series == i
Но это мучительно медленно, особенно когда список большой. Итак, я спрашиваю, есть ли более быстрый способ достижения этого в стиле pandas?
Ответ №1:
Давайте попробуем get_dummies
s = s.str.get_dummies().astype(bool)
Комментарии:
1. или
pd.get_dummies(s,dtype=bool)
напрямую 🙂2. Спасибо за ваш ответ. К сожалению, хотя это работает для приведенного примера, это не полностью решает мою проблему, потому что мне нужно поддерживать определенный порядок, а также включать значения в столбцы, которые не отображаются последовательно
3. @kandi s = s.str.get_dummies().astype(bool). переиндексировать (столбцы =ваш порядок)
4. проверьте мой ответ, который поддерживает порядок. вы также можете использовать
.reindex
Ответ №2:
Попробуйте этот метод —
pd.get_dummies
получает вам одну горячую кодированную версию серии и по мере изменения типа 1 на True
и 0 на False
.
s = pd.Series(['A','B','C','B','D','A','C'])
cols = ['A','B','C','D'] #put the order of your columns here
pd.get_dummies(s).astype(bool)[cols]
A B C D
0 True False False False
1 False True False False
2 False False True False
3 False True False False
4 False False False True
5 True False False False
6 False False True False