我有一个熊猫数据框,看起来像这样:
df=pd.DataFrame({'a':['A','B','C','A'], 'b':[1,4,1,3], 'c':[0,6,1,0], 'd':[1,0,0,5]})
我想要一个看起来像这样的数据框:
原始数据帧按“ a”列中的值分组,并且其对应的值作为字典保存在新列“ dict”中。键值对分别是列名和列中的值。如果“ a”列中的值有多个条目(例如,“ a”列中的A出现两次),则应为相同的值创建字典列表。
我该怎么办?(请忽略语法错误,如果听起来太含糊,请对这个问题提出任何疑问)
答案 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}]