Я хотел бы сохранить многоуровневую структуру моих столбцов, применяя get_dummies()
к отдельным вложенным столбцам.
Например, с учетом кадра данных:
In [1]: df = pd.DataFrame({('A','one'):['a','a','b'],
('A','two'):['b','a','a'],
('B','one'):['b','b','a'],
('B','two'):['a','a','a'],
('C','one'):['b','a','b'],
('C','two'):['a','b','a'],})
df
Out[1]:
A B C
one two one two one two
0 a b b a b a
1 a a b a a b
2 b a a a b a
Я бы хотелпроизвести что-то вроде следующего:
A B C
one_a one_b two one_a one_b two one_a one_b two
0 1 0 b 0 1 a 0 1 a
1 1 0 a 0 1 a 1 0 b
2 0 1 a 1 0 a 0 1 a
Как я могу получить результат, аналогичный приведенному выше?Как мне закодировать вложенный столбец как горячий вектор, не затрагивая многоуровневую структуру кадра данных?
Я попробовал приведенный ниже код, и я понимаю, почему он не работает.Я не могу вставить два столбца вместо одного.
In [2]: df.loc[:, (slice(None),'one')] = pd.get_dummies(df.loc[:, (slice(None),'one')])
df
Out[2]:
A B C
one two one two one two
0 NaN b NaN a NaN a
1 NaN a NaN a NaN b
2 NaN a NaN a NaN a
Я знаю, что могу также использовать drop_first=True
с get_dummies()
, но это даст мне один столбец вместо двух и будет работать только для двоичных переменных.