我有一个数据框,其中包含不同患者组中每个人的多个变量的值。例如,我有患者组中多个个体的年龄、性别、体重等,例如痴呆症、健康对照等。我想最终为每个组创建一个字典,如下所示:
{'Group': ['dementia', 'dementia', 'dementia'],
'Age': [66, 67, 90],
'Sex': ['M', 'M', 'F']}
如何循环遍历数据框并为每个数据框创建字典?到目前为止我所拥有的是 for 循环的开始:
for group in df.groupby('diagnosis'):
谢谢!
假设这样的输入:
Group Age Sex
0 healthy control 70 F
1 dementia 66 M
2 dementia 90 F
3 healthy control 62 M
4 healthy control 64 F
5 dementia 67 M
to_dict
: 转换组即可
for key, group in df.groupby('Group'):
d = group.to_dict('list')
或者,您可以使用简单的字典理解来获取字典的字典:
out = {k: g.to_dict('list') for k, g in df.groupby('Group')}
输出:
{'dementia': {'Age': [66, 90, 67],
'Group': ['dementia', 'dementia', 'dementia'],
'Sex': ['M', 'F', 'M']},
'healthy control': {'Age': [70, 62, 64],
'Group': ['healthy control',
'healthy control',
'healthy control'],
'Sex': ['F', 'M', 'F']}}
或者,由于该组已经作为键存在,因此将其从内部字典中删除:
cols = df.columns.difference(['Group'])
out = {k: g.to_dict('list') for k, g in df.groupby('Group')[cols]}
输出:
{'dementia': {'Age': [66, 90, 67], 'Sex': ['M', 'F', 'M']},
'healthy control': {'Age': [70, 62, 64], 'Sex': ['F', 'M', 'F']}}
您可以使用@mozway 输入尝试类似的操作:
Group Age Sex
0 healthy control 70 F
1 dementia 66 M
2 dementia 90 F
3 healthy control 62 M
4 healthy control 64 F
5 dementia 67 M
使用 groupby 创建数据帧组的字典。
df_dicts = dict(tuple(df.groupby('Group')))
使用以 Group 为键的字典打印每个组:
df_dicts['dementia'].to_dict('list')
输出:
{'Group': ['dementia', 'dementia', 'dementia'],
'Age': [66, 90, 67],
'Sex': ['M', 'F', 'M']}
和
df_dicts['healthy control'].to_dict('list')
输出:
{'Group': ['healthy control', 'healthy control', 'healthy control'],
'Age': [70, 62, 64],
'Sex': ['F', 'M', 'F']}