Панды - вернуть много горячих закодированных (фиктивных переменных) - PullRequest
0 голосов
/ 03 октября 2018

Предполагая, что у меня есть следующее pandas.DataFrame:

df = pd.DataFrame({'id': [1, 2, 3], 'val': [5, 5, 10],
                   'trig_aaa': [1, 0, 1], 'trig_bbb': [0, 1, 1], 'trig_ccc': [0, 0, 1]})
print(df)

   id  val  trig_aaa  trig_bbb  trig_ccc
0   1    5         1         0         0
1   2    5         0         1         0
2   3   10         1         1         1

Я хотел бы обратить его к следующему df:

   id  val             trig
0   1    5            [aaa]
1   2    5            [bbb]
2   3   10  [aaa, bbb, ccc]

Есть ли элегантный (надеюсь, функциональностьпредварительно встроенный) в Pandas / Python / Numpy?

РЕДАКТИРОВАТЬ 1:

После просмотра комментария jpps улучшенная обработка в DataFrame будет выглядеть так:

   id  val trig
0   1    5  aaa
1   2    5  bbb
2   3   10  aaa
3   3   10  bbb
4   3   10  ccc

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать pd.melt:

# rename columns and melt dataframe
df.columns = [i if '_' not in i else i.split('_')[1] for i in df]
res = pd.melt(df, id_vars=['id', 'val'], var_name='trig')

# filter for 1 values and sort
res = res[res['value'].eq(1)].sort_values('id').iloc[:, :-1].reset_index(drop=True)

print(res)

   id  val trig
0   1    5  aaa
1   2    5  bbb
2   3   10  aaa
3   3   10  bbb
4   3   10  ccc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...