将熊猫数据框的所有列值分组为字典

时间:2018-10-03 08:37:30

标签: python-3.x pandas list dictionary group-by

我有一个熊猫数据框,看起来像这样:

df=pd.DataFrame({'a':['A','B','C','A'], 'b':[1,4,1,3], 'c':[0,6,1,0], 'd':[1,0,0,5]})

我想要一个看起来像这样的数据框:

enter image description here

原始数据帧按“ a”列中的值分组,并且其对应的值作为字典保存在新列“ dict”中。键值对分别是列名和列中的值。如果“ a”列中的值有多个条目(例如,“ a”列中的A出现两次),则应为相同的值创建字典列表。

我该怎么办?(请忽略语法错误,如果听起来太含糊,请对这个问题提出任何疑问)

1 个答案:

答案 0 :(得分:2)

  

不要这样做。熊猫从未被设计为容纳序列/列中的列表/元组/字典。您可以炮制昂贵的解决方法,但这不是   推荐。

     

不推荐连续举牌的主要原因是输了   使用连续内存块中保存的NumPy数组的矢量化功能。您的系列将是   object dtype,它表示一系列指针,与list类似。你会输的   在内存和性能以及访问优化的Pandas方法方面都有好处。

     

另请参阅What are the advantages of NumPy over regular Python lists?   支持熊猫的论点与针对NumPy的论点相同。

但是如果真的需要它:

df = df.groupby('a').apply(lambda x: x.to_dict('r')).reset_index(name='dict')
print (df)
   a                                               dict
0  A  [{'a': 'A', 'b': 1, 'c': 0, 'd': 1}, {'a': 'A'...
1  B               [{'a': 'B', 'b': 4, 'c': 6, 'd': 0}]
2  C               [{'a': 'C', 'b': 1, 'c': 1, 'd': 0}]
相关问题