2013-11-22 11 views
9

私はこのような辞書で始めている:変換タプル

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

データフレームに変換するときに、列が(ID、ActivityTypeを)のタプルをヘッダとして、置きます。

df = DataFrame(dict).transpose() 

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

インデックス内のタプルをマルチインデックスに変換するにはどうすればよいですか?つまり、最終結果は次のようになります。

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

これを行うにはどうすればよいですか? DataFrameの作成に欠けているオプションがありますか?それとも、私に非効率的なリストの理解を介して発生する必要があります。

答えて

12

あなたがしたい場合は変換インデックスあなたのデータフレームのへ:

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

また、それがよので、あなたの変数dictを呼び出すことはありません、dはあなたのdictである(直接辞書からDATAFRAME を作成することができますシャドウ標準のPython辞書):values()keys()がであることを

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

注意、そう心配する必要はありません。

+1

引数として 'd.values()'だけを渡す素晴らしいトリックです!ポストソートされたインデックスに 'd 'を渡した後にアクセスするためのものを見つけ出そうとしていましたが、この方法ではまったく必要ありません。 – DSM

関連する問題