Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为字典字典_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 将数据帧转换为字典字典,python,pandas,dataframe,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 如何将其转换为一个

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

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}]}
您可以与
应用一起使用

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'}]}
您可以使用准备数据,然后拨打:


我还假设您实际上不需要一个元素列表。在这种情况下,您可以得到非常简单的解决方案。如果您需要这些列表,那么最好使用@jezrael answer

Pivot并使用to_dict方法,然后将内部dict包装在一个列表中

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

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

你能展示一下你所尝试的吗?你需要数据透视。可能重复@ChrisBeard。我的问题不同,我知道如何使用to_dict()函数,但这个问题首先需要某种透视。非常酷!非常感谢你的回答。工作太棒了!如果我的答案或其他答案有用,别忘了。谢谢
{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'}]}