2016-11-09 60 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')