Как получить доступ к колонке MultiIndex после groupby в pandas?



С одноиндексированным фреймом данных столбцы доступны в группе по объекту:



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

a
2 11
4 15


Но в Многоиндексном фрейме данных, когда он не группируется по уровням, столбцы больше не доступны в объекте group by



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


Есть ли способ получить доступ к столбцу MultiIndex в объекте groupby, который я пропустил?

759   2  

2 ответов:

Добавление запятой после вашего кортежа ('c','b'), кажется, работает:

df.groupby([('c','a')])[('c','b'),].sum()
Я предполагаю, что без запятой панды просто интерпретируют их как отдельные элементы.

Возможно, это поможет объяснить синтаксис:

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

Comments

    Ничего не найдено.