2013-11-22 15 views
9

ja wyjściowego ze słownikiem, jak to:Przetwarzanie krotki do wielu wskaźników w PANDAS Dataframe

dict = {(100000550L, u'ActivityA'): {'bar__sum': 14.0, 'foo__sum': 12.0}, 
     (100001799L, u'ActivityB'): {'bar__sum': 7.0, 'foo__sum': 3.0}} 

których, po przekształceniu w DataFrame stawia w nagłówkach kolumn krotki związku (Id), activitytype:

df = DataFrame(dict).transpose() 

         bar__sum foo__sum 
(100000550, ActivityA)  14  12 
(100001799, ActivityB)   7   3 

Jak mogę przekonwertować krotki w indeksie do MultiIndex? Oznacza to, że końcowy wynik wygląda następująco:

     bar__sum foo__sum 
id  act_type 
100000550 ActivityA  14  12 
100001799 ActivityB   7   3 

Jaki jest najlepszy sposób na zrobienie tego? Czy jest jakaś opcja w tworzeniu DataFrame, której mi brakuje? A może powinno się to odbywać poprzez zrozumienie listy, co wydaje mi się nieefektywne.

Odpowiedz

12

Jeśli chcesz wskaźnika konwersji Twojego dataframe:

>>> df.index = pd.MultiIndex.from_tuples(df.index) 
>>> df 
        bar__sum foo__sum 
100000550 ActivityA  14  12 
100001799 ActivityB   7   3 

>>> df.index.names = ['id', 'act_type'] 
>>> df 
        bar__sum foo__sum 
id  act_type      
100000550 ActivityA  14  12 
100001799 ActivityB   7   3 

Można również tworzyć DataFrame bezpośrednio ze słownika (d to DICT, nie nazywamy zmienną dict od niej przekonasz cień standardowego słownika pytona)

>>> pd.DataFrame(d.values(), index=pd.MultiIndex.from_tuples(d.keys(), names=['id', 'act_type'])) 
        bar__sum foo__sum 
id  act_type      
100001799 ActivityB   7   3 
100000550 ActivityA  14  12 

Należy zauważyć, że values() i keys()always in the same order, więc nie martw się o to.

+1

Dobra sztuczka przekazująca tylko 'd.values ​​()' jako argument! Próbowałem dowiedzieć się czegoś, aby uzyskać dostęp do posortowanego indeksu po przejściu 'd', ale w ten sposób wcale go nie potrzebujesz. – DSM

Powiązane problemy