2017-02-10 1 views
1

のは、私はこのように見える次のデータフレームパンダマルチインデックスデータフレーム

df = pd.DataFrame({0: {('A', 'a'): 1, ('A', 'b'): 6, ('B', 'a'): 2, ('B', 'b'): 7}, 
1: {('A', 'a'): 2, ('A', 'b'): 7, ('B', 'a'): 3, ('B', 'b'): 8}, 
2: {('A', 'a'): 3, ('A', 'b'): 8, ('B', 'a'): 4, ('B', 'b'): 9}, 
3: {('A', 'a'): 4, ('A', 'b'): 9, ('B', 'a'): 5, ('B', 'b'): 1}, 
4: {('A', 'a'): 5, ('A', 'b'): 1, ('B', 'a'): 6, ('B', 'b'): 2}}) 

を持っているとしましょう:

 0 1 2 3 4 
A a 1 2 3 4 5 
    b 6 7 8 9 1 
B a 2 3 4 5 6 
    b 7 8 9 1 2 

私は関係なく、スタッキングの(to_dictを経由して辞書にアンスタッキングこれを変換します)、私は辞書を取得します。そのキーはタプルです:

df.transpose().to_dict() 

{('A', 'a'): {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 
('A', 'b'): {0: 6, 1: 7, 2: 8, 3: 9, 4: 1}, 
('B', 'a'): {0: 2, 1: 3, 2: 4, 3: 5, 4: 6}, 
('B', 'b'): {0: 7, 1: 8, 2: 9, 3: 1, 4: 2}} 

私は代わりに

{'A':{'a': {0: 1, 1:2, 2:3, 3:4, 4:5}, 'b':{0:6, 1:7, 2:8, 3:9,4:1}... 

答えて

2

あなたが外側のレベル(値「A」および「B」)を反復し、それらのレベルによってフレームをスライスするxs方法を使用する辞書理解を使用することができます。このようなested辞書。

{level: df.xs(level).to_dict('index') for level in df.index.levels[0]} 

{'A': {'a': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 
    'b': {0: 6, 1: 7, 2: 8, 3: 9, 4: 1}}, 
'B': {'a': {0: 2, 1: 3, 2: 4, 3: 5, 4: 6}, 
    'b': {0: 7, 1: 8, 2: 9, 3: 1, 4: 2}}} 
+0

xsメソッドを知りませんでした。よく働く!ありがとうございました! – parasu