Как создать новые столбцы из существующих столбцов с помощью get_dummies - PullRequest
0 голосов
/ 30 января 2019

У меня есть этот кадр данных:

    column1   column2   column3   column4
0     A          A         D         D
1     B          B         D         D 
2     C          C         B         D
3     A          D         D         A 

И я хочу добавить категории из столбцов1 - столбцов4 в качестве новых столбцов к кадру данных и заполнить их 1 и 0 следующим образом:

    column1   column2   column3   column4   A     B     C     D
0     A          A         D         D      1     0     0     1
1     B          B         D         D      0     1     0     1
2     C          C         B         D      0     1     1     1
3     A          D         D         A      1     0     0     1

, поэтому я попробовал код:

pd.concat([df, df['column1'].str.get_dummies(sep=',')], axis=1)

И я получаю 1 и 0 из столбца 1.Как я могу изменить свой код, чтобы получить все 1 и 0 Условие:

0 & 0 = 0
0 & 1 = 1
1 & 0 = 1
1 & 1 = 1

Я также пытался:

df1 = df.column1.str.get_dummies(sep=',')
df2 = df.column2.str.get_dummies(sep=',') 
df3 = df.column3.str.get_dummies(sep=',') 
df4 = df.column4.str.get_dummies(sep=',') 
frames = [df1, df2, df3, df4]
result = pd.concat(frames, sort=True)

Но я хочу, чтобы категории встречались толькоодин раз как новый столбец, и значение 1 должно представлять все вхождения.Можете ли вы помочь мне:)

1 Ответ

0 голосов
/ 31 января 2019

Метод get_dummies вычисляет количество категорий на основе значений ряда, поэтому необходимо, чтобы значения ряда (столбец в вашем случае), из которого вы извлекали макеты, содержали все категории, которые вы хотитечтобы получить, другими словами, у вас должен быть столбец со значениями всех 4 столбцов, соединенных разделителем.Чтобы собрать все значения вместе, мы используем:

new_col = df[['column1', 'column2', 'column3', 'column4']].apply(lambda x: '|'.join(x), axis=1)

, который в основном объединяет все значения столбца в одну строку с "|"разделитель по очереди для получения этой серии:

0    A|A|D|D
1    B|B|D|D
2    C|C|B|D
3    A|D|D|A

Теперь мы просто применим метод get_dummies(sep='|') к столбцу выше, чтобы получить макеты с учетом всех категорий, присутствующих в этих столбцах, в одной строке кодаможет быть получен как (я также сопоставляю его с исходным набором данных для получения запрошенного вами формата):

df = pd.concat([df, df[['column1', 'column2', 'column3', 'column4']]
       .apply(lambda x: '|'.join(x), axis=1)
       .str
       .get_dummies(sep='|')], axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...