如何用Pandas GroupBy为每个分组创建字典?
实现分组生成指定格式字典的方法
首先要明确,df.groupby('diagnosis') 返回的是**(分组名称, 分组子DataFrame)**的元组对,所以循环时需要解构这两个值。以下是完整实现步骤:
1. 示例DataFrame准备(用于测试,可跳过)
先构造一个符合你场景的测试数据:
import pandas as pd data = { 'diagnosis': ['dementia', 'dementia', 'dementia', 'control', 'control'], 'Age': [66, 67, 90, 55, 60], 'Sex': ['M', 'M', 'F', 'F', 'M'], 'Weight': [70, 75, 62, 58, 72] } df = pd.DataFrame(data)
2. 循环生成目标字典
修改你的循环,解构分组名和子DataFrame,按需求构造字典:
# 可选:存储所有组的字典,按需决定是否保留 group_dicts = [] for group_name, group_df in df.groupby('diagnosis'): # 构造目标格式的字典 group_dict = { 'Group': [group_name] * len(group_df), # 生成与子DataFrame行数匹配的分组名列表 'Age': group_df['Age'].tolist(), 'Sex': group_df['Sex'].tolist() # 如需添加其他变量(如Weight),直接追加对应列的tolist()即可 } group_dicts.append(group_dict) # 也可直接在此处处理单个字典,比如打印查看 print(f"分组 {group_name} 的字典:") print(group_dict)
3. 输出结果示例
运行代码后会得到如下格式的输出:
分组 dementia 的字典: {'Group': ['dementia', 'dementia', 'dementia'], 'Age': [66, 67, 90], 'Sex': ['M', 'M', 'F']} 分组 control 的字典: {'Group': ['control', 'control'], 'Age': [55, 60], 'Sex': ['F', 'M']}
扩展说明
如果需要自动包含所有变量(无需逐个列指定),可以用循环遍历列名:
group_dict = {'Group': [group_name] * len(group_df)} for col in group_df.columns: if col != 'diagnosis': # 跳过分组用的diagnosis列 group_dict[col] = group_df[col].tolist()
内容的提问来源于stack exchange,提问作者sallicap
相关产品推荐
相关产品推荐

