2017-12-21 19 views
3

ネストされた辞書として出力しようとしているpandas multiindexデータフレームがあります。pandas multiindexデータフレームをネストされた辞書に変換する

# create the dataset 
data = {'clump_thickness': {(0, 0): 274.0, (0, 1): 19.0, (1, 0): 67.0, (1, 1): 12.0, (2, 0): 83.0, (2, 1): 45.0, (3, 0): 16.0, (3, 1): 40.0, (4, 0): 4.0, (4, 1): 54.0, (5, 0): 0.0, (5, 1): 69.0, (6, 0): 0.0, (6, 1): 0.0, (7, 0): 0.0, (7, 1): 0.0, (8, 0): 0.0, (8, 1): 0.0, (9, 0): 0.0, (9, 1): 0.0}} 
df = pd.DataFrame(data) 
df.head() 
#  clump_thickness 
# 0 0   274.0 
# 1    19.0 
# 1 0    67.0 
# 1    12.0 
# 2 0    83.0 

dfは、私は、ネストされた辞書として出力したいデータフレームです。私が探している出力は -

{"0": 
{ 
    "0":274, 
    "1":19 
}, 
"1":{ 
    "0":67, 
    "1":12 
}, 
"2":{ 
    "0":83, 
    "1":45 
}, 
"3":{ 
    "0":16, 
    "1":40 
}, 
"4":{ 
    "0":4, 
    "1":54 
}, 
"5":{ 
    "0":0, 
    "1":69 
} 
} 

ここでは、最も外側の辞書のキーを形成しています。各キーについて、キーが第2のインデックスの値である辞書が格納されています。

私がdf.to_dict()を実行すると、入れ子にする代わりに、マルチインデックスがタプルとして返されます。これをどのように達成するのですか?作業私にとって

答えて

4

d = {l: df.xs(l)['clump_thickness'].to_dict() for l in df.index.levels[0]} 

DataFrame with MultiIndex to dictのような類似した別の解決策が、Seriesのために必要なフィルターカラムは次のとおりです。

d = df.groupby(level=0).apply(lambda df: df.xs(df.name).clump_thickness.to_dict()).to_dict() 

print (d) 

{0: {0: 274.0, 1: 19.0}, 
1: {0: 67.0, 1: 12.0}, 
2: {0: 83.0, 1: 45.0}, 
3: {0: 16.0, 1: 40.0}, 
4: {0: 4.0, 1: 54.0}, 
5: {0: 0.0, 1: 69.0}, 
6: {0: 0.0, 1: 0.0}, 
7: {0: 0.0, 1: 0.0}, 
8: {0: 0.0, 1: 0.0}, 
9: {0: 0.0, 1: 0.0}} 
+0

卿が重複した質問にこれを追加します。それは良いでしょう – Dark

+0

しかし、それはシリーズです、これはDataFrameです:( – jezrael

+1

ああ私は部分を逃した。あなたは私の投票を持って – Dark