Как применить одну горячую кодировку или получить макеты на 2 столбца вместе в pandas? - PullRequest
2 голосов
/ 16 января 2020

У меня есть ниже датафрейм, который содержит примеры значений, такие как: -

df = pd.DataFrame([["London", "Cambridge", 20], ["Cambridge", "London", 10], ["Liverpool", "London", 30]], columns= ["city_1", "city_2", "id"])

city_1     city_2        id
London     Cambridge     20
Cambridge  London        10
Liverpool  London        30

Мне нужен выходной фрейм данных, как показано ниже, который создается при объединении двух столбцов города и применении одного горячего кодирования после этого:

id London Cambridge Liverpool
20 1       1        0
10 1       1        0
30 1       0        1

В настоящее время я использую приведенный ниже код, который работает один раз для столбца, пожалуйста, не могли бы вы посоветовать, если есть какой-либо pythoni c способ получить вышеуказанный вывод

output_df = pd.get_dummies(df, columns=['city_1', 'city_2'])

, который результаты в

id city_1_Cambridge city_1_London and so on columns

1 Ответ

2 голосов
/ 16 января 2020

Вы можете добавить параметры prefix_sep и prefix к get_dummies, а затем использовать max, если хотите только значения 1 или 0 (столбцы или столбцы индикатора) или sum если нужно подсчитать 1 значения:

output_df = (pd.get_dummies(df, columns=['city_1', 'city_2'], prefix_sep='', prefix='')
               .max(axis=1, level=0))
print (output_df)
   id  Cambridge  Liverpool  London
0  20          1          0       1
1  10          1          0       1
2  30          0          1       1

Или, если хотите обработать все столбцы без id, преобразуйте не обработанные столбцы в индекс сначала по DataFrame.set_index, затем используйте get_dummies с max и последним добавлением DataFrame.reset_index:

output_df = (pd.get_dummies(df.set_index('id'), prefix_sep='', prefix='')
               .max(axis=1, level=0)
               .reset_index())
print (output_df)
   id  Cambridge  Liverpool  London
0  20          1          0       1
1  10          1          0       1
2  30          0          1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...