2016-11-09 61 views
1

在DataFrame“data_to_rank”中,我有一列“r_DTS”。 data_to_rank [ 'r_DTS']表示:熊猫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') 

('HY','Missing')和('IG','Missing')在哪里?

回答

1

当您按分类进行分组时,它将包括分组中的所有分类,即使是没有表示的分类。

当您按多个项目分组时,即使它们都是分类dtypes,它也不会授予您相同的权限。

你必须构建你自己的分类来分组。这是如何做到这一点的一个例子:

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')