Извлечение категориальных данных из фиктивных функций - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь объединить 4 категориальных столбца в 1 с расплавлением панд, но он создает 3 дубликата каждой строки (что дает мне в 4 раза больше строк).

dat = pd.DataFrame({'Name':('Tom','Pete','Mark','Steve'),
                    'Type1':(0,1,0,0),
                   'Type2':(1,0,0,0),
                   'Type3':(0,0,0,0),
                   'Type4':(0,0,0,0)})
dat = pd.melt(dat, id_vars='Name', 
              value_vars=('Type1', 'Type2', 'Type3', 'Type4'), value_name='type')



Name    variable    type
0   Tom     Type1   0
1   Pete    Type1   1
2   Mark    Type1   0
3   Steve   Type1   0
4   Tom     Type2   1
5   Pete    Type2   0
6   Mark    Type2   0
7   Steve   Type2   0
8   Tom     Type3   0
9   Pete    Type3   0
10  Mark    Type3   0
11  Steve   Type3   0
12  Tom     Type4   0
13  Pete    Type4   0
14  Mark    Type4   0
15  Steve   Type4   0

Другая проблема, с которой я столкнулсядогадка не может быть решена с помощью melt - это замена всех строк, где значение 0 для всех типов, на «None», но, вероятно, это можно сделать простым запросом - исправление дубликатов - это мое беспокойство на данный момент.Разве я не должен использовать melt?

Я пытаюсь получить: столбец с типом 1 или 2 или 3 или 4. Так что в этом случае:

    Name    Type
0   Tom     Type2
1   Pete    Type1
2   Mark    Type3
3   Steve   Type3

Гдепоследние 2 предпочтительно превратятся в «Нет», поскольку этим двум именам не назначен тип.(Надеюсь, я не сойду с ума, и это имеет смысл для кого-то, кроме меня).

1 Ответ

0 голосов
/ 21 ноября 2018

idxmax

dat = pd.DataFrame({'Name':('Tom','Pete','Mark','Steve'),
                'Type1':(0,1,0,0),
               'Type2':(1,0,0,0),
               'Type3':(0,0,0,0),
               'Type4':(0,0,0,0)})

df = dat.loc[:,'Type1':].replace(0, np.nan)
df.idxmax(axis=1).to_frame(name='Type').set_index(dat.Name)

         Type
Name        
Tom    Type2
Pete   Type1
Mark     NaN
Steve    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...