python-3.x 将panda.groupby转换为dict

nlejzf6q  于 2023-03-04  发布在  Python
关注(0)|答案(2)|浏览(265)

考虑 Dataframe d

  1. d = pd.DataFrame({'a': [0, 2, 1, 1, 1, 1, 1],
  2. 'b': [2, 1, 0, 1, 0, 0, 2],
  3. 'c': [1, 0, 2, 1, 0, 2, 2]})
  4. > a b c
  5. 0 0 2 1
  6. 1 2 1 0
  7. 2 1 0 2
  8. 3 1 1 1
  9. 4 1 0 0
  10. 5 1 0 2
  11. 6 1 2 2

我想按列a将其拆分到字典中,如下所示:

  1. {0: a b c
  2. 0 0 2 1,
  3. 1: a b c
  4. 2 1 0 2
  5. 3 1 1 1
  6. 4 1 0 0
  7. 5 1 0 2
  8. 6 1 2 2,
  9. 2: a b c
  10. 1 2 1 0}

我使用pandas.groupby找到的解决方案是:

  1. {k: table for k, table in d.groupby("a")}

其他解决方案是什么?

krcsximq

krcsximq1#

您可以将dict与应用于groupbytuple/list一起使用:

  1. res = dict(tuple(d.groupby('a')))

dict的一个高效内存替代方法是创建groupby对象,然后使用get_group

  1. res = d.groupby('a')
  2. res.get_group(1) # select dataframe where column 'a' = 1

如果生成的表需要一些小的操作,例如重置索引或删除groupby列,则继续使用字典解析。

  1. res = {k: v.drop('a', axis=1).reset_index(drop=True) for k, v in d.groupby('a')}
pprl5pva

pprl5pva2#

  1. d.groupby('a').apply(lambda dd:dd.to_dict('i')).to_dict()

输出:

  1. {0: {0: {'a': 0, 'b': 2, 'c': 1}},
  2. 1: {2: {'a': 1, 'b': 0, 'c': 2},
  3. 3: {'a': 1, 'b': 1, 'c': 1},
  4. 4: {'a': 1, 'b': 0, 'c': 0},
  5. 5: {'a': 1, 'b': 0, 'c': 2},
  6. 6: {'a': 1, 'b': 2, 'c': 2}},
  7. 2: {1: {'a': 2, 'b': 1, 'c': 0}}}

相关问题