You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pythonic方式实现Pandas分组后转records格式字典?

按列分组生成records格式字典的高效解法

给定如下DataFrame:

import pandas as pd
df = pd.DataFrame({'a': [1,1,1,2], 'b': ['a', 'a', 'b', 'c'], 'd': [1, 2, 3, 4]})

目标是生成以a列值为键,对应分组转为to_dict('records')格式列表为值的字典:

{1: [{'b':'a', 'd': 1}, {'b': 'a', 'd': 2}, {'b': 'b', 'd': 3}], 2: [{'b': 'c', 'd': 4}]}

尝试过的方法及问题

  • 方法1:字典结构正确但格式不符合需求
# 输出结果是列值为列表,而非每个行转成字典的列表
df.groupby('a').agg(list).to_dict('index')
# 输出:{1: {'b': ['a', 'a', 'b'], 'd': [1, 2, 3]}, 2: {'b': ['c'], 'd': [4]}}
  • 方法2:丢失分组的索引键
# 输出是列表,无法对应原分组的键值
df.groupby('a').agg(list).to_dict('records')
# 输出:[{'b': ['a', 'a', 'b'], 'd': [1, 2, 3]}, {'b': ['c'], 'd': [4]}]
  • 方法3:因索引不唯一报错
df.set_index('a').to_dict('index')
# 报错:ValueError: DataFrame index must be unique for orient='index'

两种Pythonic的解法

解法1:利用groupby.apply

result = df.groupby('a').apply(lambda x: x[['b', 'd']].to_dict('records')).to_dict()
print(result)

通过apply对每个分组的DataFrame直接调用to_dict('records'),最后用to_dict()将分组键和结果映射成目标字典。

解法2:字典推导式

result = {key: group[['b', 'd']].to_dict('records') for key, group in df.groupby('a')}
print(result)

直接遍历groupby返回的键值对,对每个分组处理后构建字典,可读性强且高效。

内容的提问来源于stack exchange,提问作者Bruno Mello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:35:41