基于DataFrame多列与Groupby操作创建嵌套字典
pandas按分组生成嵌套字典实现方法
针对给出的样例DataFrame和目标嵌套字典结构,可直接用以下两种方法实现:
- 方法1:groupby + 字典推导式(可读性高,性能优秀)
核心逻辑是先按一级键所在的ColA列分组,遍历每个分组时,将分组内的二级键列ColB设为索引、值列ColC转为字典,最终拼接为完整嵌套结构:
# df为你的原始DataFrame变量 result = {} for group_name, group_data in df.groupby('ColA'): result[group_name] = group_data.set_index('ColB')['ColC'].to_dict()
如果偏好更紧凑的写法,可以直接用字典推导式:
result = {g_name: g_data.set_index('ColB')['ColC'].to_dict() for g_name, g_data in df.groupby('ColA')}
- 方法2:链式调用写法(一行代码实现)
利用pandas的apply和to_dict链式方法,不需要写显式循环:
result = df.groupby('ColA').apply(lambda x: x.set_index('ColB')['ColC'].to_dict()).to_dict()
两种方法运行提供的样例数据,都会输出完全匹配需求的结果:
{ 'Dog': {'Red': 8, 'Black': 10, 'White': 2, 'Blue': 4}, 'Cat': {'Red': 7, 'Black': 11, 'White': 12, 'Blue': 40} }
特殊场景处理
如果数据存在同一个ColA+ColB组合对应多条ColC值的情况,可以先对二级键做聚合再转字典,比如对重复键的值求和:
result = { g_name: g_data.groupby('ColB')['ColC'].sum().to_dict() for g_name, g_data in df.groupby('ColA') }
把sum()替换成mean()、max()等聚合函数即可实现其他聚合逻辑。
内容的提问来源于stack exchange,提问作者dmd7
相关产品推荐
相关产品推荐

