2016-08-02 121 views
4

對於單索引的數據幀,列該組中可用的對象:如何在pandas中的groupby之後訪問MultiIndex列?

df1 = pd.DataFrame({'a':[2,2,4,4], 'b': [5,6,7,8]}) 
df1.groupby('a')['b'].sum() -> 

a 
2 11 
4 15 

但是,在一個多指標數據幀時,不按級別分組,列沒有按對象

組中再進行訪問
df = pd.concat([df1, df1], keys=['c', 'd'], axis=1) 
df -> 

    c  d 
    a b a b 
0 2 5 2 5 
1 2 6 2 6 
2 4 7 4 7 
3 4 8 4 8 

df.groupby([('c','a')])[('c','b')].sum() -> 
KeyError: "Columns not found: 'b', 'c'" 

作爲一個解決方法,它可以工作,但效率不高,因爲它不使用cpythonized聚合器,更不用說它看起來很尷尬。

df.groupby([('c','a')]).apply(lambda df: df[('c', 'b')].sum()) 

有沒有辦法訪問我錯過的groupby對象中的MultiIndex列?

+3

你的'( 'C', 'B')後添加一個逗號'元組似乎工作:'df.groupby([( 'C',」一個 ')])[(' C」, 'b'),]。總和()'。我猜測沒有逗號,熊貓只是將它們解釋爲單獨的項目。 – root

回答

3

添加逗號你('c','b')元組後,似乎工作:

df.groupby([('c','a')])[('c','b'),].sum() 

我猜測,如果沒有逗號,大熊貓只是解釋他們作爲獨立的項目。

+0

我打算把這個標記爲答案,雖然它有點令人不滿意,也許是熊貓中的一個錯誤。 – polyglot

0

也許這可以解釋的語法:

df.groupby([('c','a')]).sum() 

     c d  
     b a b 
(c, a)   
2  11 4 11 
4  15 8 15 

df.groupby([('c','a')])[('c','b'),('d','b')].sum() 

     c d 
     b b 
(c, a)   
2  11 11 
4  15 15