2017-12-21 2 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

내가 중첩 된 사전으로 출력 할 dataframe입니다. 내가 찾는 결과는 다음과 같습니다. -

{"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 
} 
} 

여기서 첫 번째 색인은 가장 바깥 쪽 사전의 키를 형성합니다. 각 키에 대해 키가 두 번째 인덱스의 값인 사전이 있습니다.

중첩 대신 df.to_dict()을 수행하면 multiindex가 터플로 반환됩니다. 이것을 어떻게 성취합니까? 작업 나를 위해

답변

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

관련 문제