2016-12-09 7 views
-3

Ich habe einen Datenrahmen, in dem ich Attribute und Werte für zwei Produkte habe.Konvertieren eines Pandas Datenrahmens in ein Wörterbuch von Wörterbüchern

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 

Wie kann ich es in ein Wörterbuch einer Liste von Wörterbüchern konvertieren, die wie folgt aussehen?

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

zeigen Ihnen, was Sie – EdChum

+2

versucht haben, Sie müssen die Daten schwenken. – James

+1

Sie sollten zur vorherigen Bearbeitung zurückkehren. Die Bearbeitung, die Sie gerade gemacht haben, macht Ihre Frage viel weniger so freundlich – Craicerjack

Antwort

1

können Sie verwenden groupby mit apply:

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

Wow Danke! Das funktioniert super! –

+0

Wenn meine oder eine andere Antwort hilfreich war, vergessen Sie [accept] (http://meta.stackexchange.com/a/5235/295067) nicht. Vielen Dank. – jezrael

0

Sie pandas.DataFrame.pivot verwenden können, um Ihre Daten zu erstellen und dann rufen 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'}} 

Ich gehe davon aus, dass Sie nicht wirklich brauche dort Ein-Element-Listen. In diesem Fall können Sie wirklich einfache Lösung haben. Wenn Sie diese Listen benötigen, ist es wahrscheinlich besser, mit @jezrael antworten

+0

Sehr cool! Vielen Dank für diese Antwort. Wunderbar arbeiten! –

0

Pivot und verwenden Sie die To_dict-Methode und dann das innere Diktat in eine Liste umbrechen.

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

Verständnis

{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'}]} 
Verwandte Themen