2016-12-09 3 views
-3

두 제품에 대한 특성 및 값이있는 데이터 프레임이 있습니다.pandas 데이터 프레임을 사전 형식 사전으로 변환

PRODUCT ATTRIBUTE VALUES 
prod1 Attr1   A 
prod1 Attr2   B 
prod1 Attr3   C 
prod1 Attr4   D 
prod2 Attr1   E 
prod2 Attr2   F 
prod2 Attr3   G 
prod2 Attr4   H 

어떻게하면 다음과 같은 사전 목록으로 변환 할 수 있습니까?

{'prod1':[{'Attr1':A, 'Attr2':B, 'Attr3':C, 'Attr4':D}], 'prod2':[{'Attr1':E, 'Attr2':F, 'Attr3':G, 'Attr4':H}]} 
+1

당신은 당신의 데이터를 피벗 할 필요가 당신이 – EdChum

+2

을 시도했습니다 표시 할 수 있습니다. – James

+1

이전 편집으로 되돌아 가야합니다. 방금 한 편집으로 질문이 훨씬 덜 친숙 해집니다. – Craicerjack

답변

1

당신은 applygroupby를 사용할 수 있습니다

d = df.groupby('PRODUCT').apply(lambda x: [dict(zip(x.ATTRIBUTE, x.VALUES))]).to_dict() 
print (d) 
{'prod1': [{'Attr1': 'A', 'Attr2': 'B', 'Attr3': 'C', 'Attr4': 'D'}], 
'prod2': [{'Attr1': 'E', 'Attr2': 'F', 'Attr3': 'G', 'Attr4': 'H'}]} 
+0

와우 감사합니다! 이 놀라운 작품! –

+0

내 대답이나 다른 대답이 도움이 되었다면 [수락] (http://meta.stackexchange.com/a/5235/295067)을 잊지 마세요. 감사. – jezrael

0

당신은 당신의 데이터를 준비하는 pandas.DataFrame.pivot를 사용하고 pandas.DataFrame.to_dict 호출 할 수 있습니다 : 나는 또한 당신이 실제로하지 않는 것으로 가정

>>> df.pivot(columns='PRODUCT',index='ATTRIBUTE', values='VALUES').to_dict() 
{'prod1': {'Attr4': 'D', 'Attr2': 'B', 'Attr3': 'C', 'Attr1': 'A'}, 'prod2': {'Attr4': 'H', 'Attr2': 'F', 'Attr3': 'G', 'Attr1': 'E'}} 

거기에 하나의 요소 목록이 필요합니다. 이 경우에는 정말 간단한 해결책을 가질 수 있습니다. 그 목록이 필요하면 @jezrael 답을 사용하는 것이 더 좋습니다.

+0

매우 좋습니다! 이 답변을 주셔서 감사합니다. 놀라운 일! –

0

피벗을 사용하고 to_dict 메서드를 사용한 다음 목록에서 내부 dict를 감 쌉니다.

d= df.pivot(index='PRODUCT', columns='ATTRIBUTE', values='VALUES').to_dict() 
{key:[value] for key,value in d.items()} 
1

이해는

{k: [v.to_dict()] for k, v in df.set_index(['PRODUCT', 'ATTRIBUTE']).VALUES.unstack(0).iteritems()} 

{'prod1': [{'Attr1': 'A', 'Attr2': 'B', 'Attr3': 'C', 'Attr4': 'D'}], 
'prod2': [{'Attr1': 'E', 'Attr2': 'F', 'Attr3': 'G', 'Attr4': 'H'}]} 
관련 문제