2013-10-05 11 views
8

I pogrupowane mój dataframe przez dwóch kolumnach poniżejJak wybrać kolumny z obiektu groupby w pandach?

df = pd.DataFrame({'a': [1, 1, 3], 
        'b': [4.0, 5.5, 6.0], 
        'c': [7L, 8L, 9L], 
        'name': ['hello', 'hello', 'foo']}) 
df.groupby(['a', 'name']).median() 

a wynik jest:

  b c 
a name    
1 hello 4.75 7.5 
3 foo 6.00 9.0 

Jak mogę uzyskać dostęp do pola wynikowego mediany name (w tym przypadku hello, foo)? To się nie uda:

df.groupby(['a', 'name']).median().name 

Odpowiedz

10

Musisz uzyskać wartości indeksu, nie są to kolumny. W tym przypadku poziom 1

df.groupby(["a", "name"]).median().index.get_level_values(1) 

Out[2]: 

Index([u'hello', u'foo'], dtype=object) 

Można również przekazać nazwę indeksu

df.groupby(["a", "name"]).median().index.get_level_values('name') 

jak to będzie bardziej intuicyjne niż przechodząc wartości całkowite.

można przekonwertować wartości indeksu do listy poprzez wywołanie tolist()

df.groupby(["a", "name"]).median().index.get_level_values(1).tolist() 

Out[5]: 

['hello', 'foo'] 
+0

Jeśli poziom ma nazwę to można do niego dostęp przez nazwę, która jest nieco bardziej wyraźne niż indeksu liczbowego. 'index.get_level_values ​​('name')'. –

+0

@PhillipCloud Tak, zapomniałem, że możesz to zrobić, jestem leniwy w pisaniu. Zaktualizuję odpowiedź – EdChum

0

Można również reset_index() na skutek GroupBy wrócić do dataframe z kolumny nazwa obecnie dostępnym.

import pandas as pd 
df = pd.DataFrame({"a":[1,1,3], "b":[4,5.5,6], "c":[7,8,9], "name":["hello","hello","foo"]}) 
df_grouped = df.groupby(["a", "name"]).median() 
df_grouped.name 
0 hello 
1  foo 
Name: name, dtype: object 

Jeśli wykonać operację na jednej kolumnie powrót będzie seria z multiindex i można po prostu zastosować pd.DataFrame do niego, a następnie reset_index.

5

Set as_index = False podczas GroupBy

df = pandas.DataFrame({"a":[1,1,3], "b":[4,5.5,6], "c":[7,8,9], "name":["hello","hello","foo"]}) 
df.groupby(["a", "name"] , as_index = False).median() 
Powiązane problemy