Pandas get_dummies включать столбцы для пропущенных категорий? - PullRequest
1 голос
/ 13 апреля 2020

Например:

import numpy as np
import pandas as pd

df1 = pd.DataFrame({
    'id': [1, 2, 3, 4], 
    'category': ['A', 'B', 'C', 'D']
})
df1_dummy = pd.get_dummies(df1)
print(df1_dummy)

Я получил:

    id  category_A  category_B  category_C  category_D
0    1           1           0           0           0
1    2           0           1           0           0
2    3           0           0           1           0
3    4           0           0           0           1

Однако у меня есть еще один DataFrame, который выглядит так:

df2 = pd.DataFrame({
    'id': [1, 2, 3, 4], 
    'category': ['A', 'A', 'B', 'B']
})
df2_dummy = pd.get_dummies(df2)
print(df2_dummy)

Я получил :

   id   category_A  category_B
0   1            1           0
1   2            1           0
2   3            0           1
3   4            0           1

И моя проблема в том, есть ли способы автоматически сгенерировать df2_dummy как df1_dummy со столбцами ['category_ C', 'category_D'] и оба значения равны нулю, выглядит как:

df2_dummy:

    id  category_A  category_B  category_C  category_D
0    1           1           0           0           0
1    2           1           0           0           0
2    3           0           1           0           0
3    4           0           1           0           0

Буду признателен, если кто-то может помочь!

1 Ответ

1 голос
/ 13 апреля 2020

Предполагая, что категории df2 совпадают с категориями df1, вы можете "syn c" их так, чтобы pd.get_dummies обрабатывал недостающие категории соответствующим образом:

pd.get_dummies(
    pd.Categorical(df2['category'], categories=df1['category'].unique()))

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

Вот что вы будет делать:

df2['category'] = pd.Categorical(
    df2['category'], categories=df1['category'].unique())
pd.get_dummies(df2)

   id  category_A  category_B  category_C  category_D
0   1           1           0           0           0
1   2           1           0           0           0
2   3           0           1           0           0
3   4           0           1           0           0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...