2016-11-09 5 views
1

в DataFrame «data_to_rank», у меня есть столбец «r_DTS». data_to_rank [ 'r_DTS'] показывает:pandas groupby: отсутствует ключ группы?

Name: r_DTS, dtype: category 
Categories (4, object): [Bottom < 2 < Top < Missing] 

Когда я делаю:

>>> b = data_to_rank.groupby(['r_DTS']) 
>>> for key, group in b: print(key) 
Bottom 
2 
Top 
Missing 

Однако, когда я группа по 'r_DTS' с другой переменной, "Пропавшие без вести" в "r_DTS" disapear.

>>> a = data_to_rank.groupby(['GRADE','r_DTS']) 
>>> for key, group in a: print(key) 
('HY', 'Bottom') 
('HY', '2') 
('HY', 'Top') 
('IG', 'Bottom') 
('IG', '2') 
('IG', 'Top') 

Где ('ГИ', 'Отсутствует') и ('IG', 'Отсутствует')?

ответ

1

Когда вы группируетесь категориально, оно включает в себя все категории в группе, даже те, у которых нет представления.

Когда вы группируете несколько элементов, даже если все они являются категориальными типами, это не дает вам той же привилегии.

Вы должны создать свою собственную категориальную группу. Это пример того, как это сделать:

cats = pd.MultiIndex.from_product([ 
     data_to_rank.GRADE.cat.categories, 
     data_to_rank.r_DTS.cat.categories, 
    ]).map(tuple) 

categorical_to_group_by = pd.Categorical(
    data_to_rank[['GRADE', 'r_DTS']].apply(tuple, 1), cats 
) 

g = data_to_rank.groupby(categorical_to_group_by) 

for name, group in g: 
    print(name) 

('HY', 'Bottom') 
('HY', 2) 
('HY', 'Top') 
('HY', 'Missing') 
('IG', 'Bottom') 
('IG', 2) 
('IG', 'Top') 
('IG', 'Missing') 
Смежные вопросы