如何将pandas Dataframe 转换为可切片的字典

3mpgtkmj  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(134)

我有一个pandas数据框df,如下所示

import pandas as pd
data = [[1, 'Jack', 'A'], [1, 'Jamie', 'A'], [1, 'Mo', 'B'], [1, 'Tammy', 'A'], [2, 'JJ', 'A'], [2, 'Perry', 'C']]
df = pd.DataFrame(data, columns=['id', 'name', 'class'])
> df
   id   name class
0   1   Jack     A
1   1  Jamie     A
2   1     Mo     B
3   1  Tammy     A
4   2     JJ     A
5   2  Perry     C

我想把它转换成字典mydict其中

> mydict[0]
{'id': '1', 'name': ['Jack', 'Jamie', 'Mo', 'Tammy'], 'class': ['A', 'A', 'B', 'A']}

> mydict[1]
{'id': '2', 'name': ['JJ', 'Perry'], 'class': ['A', 'C']}

> mydict[0:2]
{'id': ['1', '2'], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'],['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}

我尝试了mydict = df.to_dict(),但似乎没有按预期工作。

2j4z5cfb

2j4z5cfb1#

您可以用途:

out = df.groupby('id', as_index=False).agg(list).to_dict('records')

备选方案:

out = [{'id': k} | g.drop(columns='id').to_dict('list')
       for k, g in df.groupby('id', as_index=False)]

输出:

[{'id': 1,
  'name': ['Jack', 'Jamie', 'Mo', 'Tammy'],
  'class': ['A', 'A', 'B', 'A']},
 {'id': 2, 'name': ['JJ', 'Perry'], 'class': ['A', 'C']}]

Alternative,as dictionary:

out = df.groupby('id', as_index=False).agg(list).to_dict('index')

输出:

{0: {'id': 1,
     'name': ['Jack', 'Jamie', 'Mo', 'Tammy'],
     'class': ['A', 'A', 'B', 'A']},
 1: {'id': 2, 'name': ['JJ', 'Perry'], 'class': ['A', 'C']}}
myzjeezk

myzjeezk2#

编码

mydict = df.groupby('id').agg(list).reset_index().T.to_dict()

输出

mydict[0]

{'id': 1, 'name': ['Jack', 'Jamie', 'Mo', 'Tammy'], 'class': ['A', 'A', 'B', 'A']}

mydict

{0: {'id': 1, 'name': ['Jack', 'Jamie', 'Mo', 'Tammy'], 'class': ['A', 'A', 'B', 'A']},
 1: {'id': 2, 'name': ['JJ', 'Perry'], 'class': ['A', 'C']}}

相关问题