如何将 pandas 数据框转换为可切片的字典

huangapple go评论65阅读模式
英文:

How to convert a pandas data frame to a sliceable dictionary

问题

mydict = df.groupby('id').apply(lambda x: x.drop('id', axis=1).to_dict(orient='list')).to_dict()
英文:

I have a pandas data frame df that looks like this

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

I want to convert this to a dictionary mydict where

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

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

and

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

I tried mydict = df.to_dict() but that didn't seem to work as intended.

答案1

得分: 2

以下是您提供的代码的中文翻译:

你可以使用:

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']}]

另一种方式,作为字典:

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']}}
英文:

You can use:

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

Alternative:

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

Output:

[{'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')

Output:

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

答案2

得分: 1

Output

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']}}
英文:

Code

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

Output

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']}}

huangapple
  • 本文由 发表于 2023年5月7日 13:42:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/76192357.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定