【问题标题】:Grouping all column values of a pandas dataframe into a dictionary将熊猫数据框的所有列值分组到字典中
【发布时间】:2019-03-08 10:38:29
【问题描述】:

我有一个看起来像这样的 pandas 数据框:

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 出现两次),则应为相同的值创建字典列表。

我该怎么做?(请忽略语法错误,如果听起来太模糊,请提出任何疑问)

【问题讨论】:

  • 为什么你想这样做?

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


【解决方案1】:

不要这样做。 Pandas 从来没有被设计为在系列/列中保存列表/元组/字典。您可以炮制昂贵的解决方法,但这些不是 推荐。

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

另见What are the advantages of NumPy over regular Python lists? 支持 Pandas 的论点与支持 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}]

【讨论】:

  • 我怀疑“如果真的需要它”是 XY 类问题;)
  • @jezrael 谢谢!这行得通。既然你说熊猫不是为了在列中保存列表/元组/字典,你能告诉我如何在 numpy 数组中做到这一点吗?
  • @RemyM - pandas 是为使用标量而设计的,也适用于 numpy。
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2020-07-22
  • 2017-11-27
  • 2021-07-17
相关资源
最近更新 更多