2016-12-09 10 views
-3

私は2つの製品の属性と値を持つデータフレームを持っています。パンダのデータフレームを辞書の辞書に変換する

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

そこに1要素のリストが必要です。この場合、あなたは本当に簡単な解決策を持つことができます。これらのリストが必要な場合は、@ 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'}]} 
関連する問題