pandas get_dummies() для нескольких столбцов с заранее определенным списком

Я изо всех сил пытаюсь создать столбцы манекенов для моего фрейма данных.

Это мой оригинальный фрейм данных:

df = pd.DataFrame({'id': ['01', '02', '03'],
                    'Q1': ['a', 'b', 'a'],
                    'Q2': ['c', 'b', 'a']})
print(df)

   id Q1 Q2
0  01  a  c
1  02  b  b
2  03  a  a

У меня есть заранее определенный список ответов как для Q1, так и для Q2:

ls = list("abc")
print(ls)
['a', 'b', 'c']

Моя ожидаемая структура фрейма данных:

   id Q1_a Q1_b Q1_c Q2_a Q2_b Q2_c
0  01    1    0    0    0    0    1
1  02    0    1    0    0    1    0
2  03    1    0    0    1    0    0

Пожалуйста помоги! Спасибо!


person jiwaixiaotong    schedule 21.05.2021    source источник


Ответы (2)


Основываясь на сообщении здесь, вот один ответ:

df2 = pd.get_dummies(df[['Q1', 'Q2']].astype(pd.CategoricalDtype(categories=ls)))
df2.insert(0, 'id', df['id'])

Выход:

df2
    id  Q1_a    Q1_b    Q1_c    Q2_a    Q2_b    Q2_c
0   01     1       0       0       0       0    1
1   02     0       1       0       0       1    0
2   03     1       0       0       1       0    0
person SomeDude    schedule 21.05.2021
comment
Большое спасибо! Это именно то, что я искал! - person jiwaixiaotong; 22.05.2021

Пытаться:

df = pd.DataFrame(
    {"id": ["01", "02", "03"], "Q1": ["a", "b", "a"], "Q2": ["c", "b", "a"]}
)

ls = list("abc")

idx = pd.MultiIndex.from_product([df.loc[:, "Q1":], ls])
x = pd.concat(
    {c: pd.get_dummies(df[c]) for c in df.loc[:, "Q1":]}, axis=1
).reindex(columns=idx, fill_value=0)
x.columns = x.columns.map("_".join)
print(pd.concat([df["id"], x], axis=1))

Отпечатки:

   id  Q1_a  Q1_b  Q1_c  Q2_a  Q2_b  Q2_c
0  01     1     0     0     0     0     1
1  02     0     1     0     0     1     0
2  03     1     0     0     1     0     0
person Andrej Kesely    schedule 21.05.2021
comment
Спасибо за быстрый ответ! Я попробовал это на своем фрейме данных, и это сработало! - person jiwaixiaotong; 22.05.2021