2013-11-22 8 views
9

ich mit einem Wörterbuch wie folgt beginnen:Tupel auf mehrere Indizes in einer Pandas Dataframe Konvertieren

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

die, wenn sie auf einen Datenrahmen umgewandelt, setzt als Spalte die Tupel von (id, Activity) headers:

df = DataFrame(dict).transpose() 

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

Wie kann ich die Tupel im Index in einen MultiIndex konvertieren? Dh, damit das Endergebnis stattdessen so aussieht:

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

Was ist der beste Weg, dies zu tun? Gibt es eine Option für die Erstellung von Dataframe, die ich vermisse? Oder sollte es über ein Listenverständnis geschehen, das sich für mich als ineffizient empfindet.

Antwort

12

Wenn Sie wollen convert Index Ihrer Datenrahmen:

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

Sie können auch Datenrahmen erstellen direkt vom Wörterbuch (d ist Ihr dict, rufen Sie nicht Ihre Variable dict da es werde Schatten Standard-python-Wörterbuch):

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

Beachten Sie, dass values() und keys() 012.390 sind, also keine Sorgen darüber.

+1

Nice Trick, nur 'd.values ​​()' als Argument übergeben! Ich habe versucht, etwas herauszufinden, um Zugriff auf den nachsortierten Index zu bekommen, nachdem ich 'd' passiert habe, aber auf diese Weise brauchen Sie es überhaupt nicht. – DSM

Verwandte Themen