英文:
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']}}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论