将pandas数据帧转换为字典字典

时间:2016-12-09 16:29:52

标签: python pandas dataframe

我有一个数据框,其中我有两个产品的属性和值。

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

4 个答案:

答案 0 :(得分:2)

您可以groupby使用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'}]}

答案 1 :(得分: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'}]}

答案 2 :(得分: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回答

答案 3 :(得分:0)

透视并使用to_dict方法,然后将内部字典包装在列表中。

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