Нужна помощь в создании псевдо-фиктивной переменной, которая вместо '1' использует значение из другого столбца - PullRequest
0 голосов
/ 27 марта 2019

У меня есть кадр данных, который выглядит следующим образом:

A     B    C

34    x    a
3     y    b
23    y    a
40    x    b

По сути, столбцы B и C должны стать фиктивными переменными с заголовками B_x, B_y, C_a, C_b.Функция почти точно так же, как get_dummies () работает в пандах, с одним существенным отличием: мне нужно, чтобы значение было значением в столбце A для всех фиктивных переменных, созданных там, где значение было бы равно 1. Что-то вроде

A     B_x   B_y  C_a C_b

34    34    0    34  0
3     0     3    0   3
23    0     23   23  0
40    40    0    0   40

Я работаю с довольно большими данными с большим количеством категорий.

Я пытался использовать get_dummies () для набора данных, а затем df.mask, чтобы изменить все 1 на df.A, однако это ужасно медленно (около 10 минут).

1 Ответ

1 голос
/ 27 марта 2019

Используйте pd.get_dummies и широковещательный столбец A

df2 = pd.get_dummies(df[['B', 'C']]) * df.A.values.reshape([-1,1])

    B_x B_y C_a C_b
0   34  0   34  0
1   0   3   0   3
2   0   23  23  0
3   40  0   0   40

Чтобы назначить обратно A, существует много альтернатив.Можно сделать df2['A'] = df['A'] или использовать pd.concat

pd.concat([df.A, df2], axis=1)
...