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

如何通过apply/lambda将分组后的DataFrame转换为指定格式字典?

问题与解决方案

你现在的需求是把按列A分组的DataFrame转换成键为A的取值,值为(B,C)元组组成的列表的字典对吧?先梳理下你的原始数据、目标格式和遇到的问题:

原始DataFrame结构

A     B   C
0  11   one  5
1  11   two  7
2  11 three  9
3  22   one 11
4  22   two 13

目标字典格式

{11: [('one', 5), ('two', 7), ('three', 9)], 22: [('one', 11), ('two', 13)]}

你之前尝试的代码:

df_dict = df.groupby('A').apply(lambda y: {(x.B, x.C) for i, x in y.iterrows()})

得到的是分组后的Series,且值是集合(大括号包裹),和目标的字典+列表结构不符。

修改后的代码方案

这里有两种实用的修改方式:

方法一:调整返回类型并转字典

把lambda里的集合改为列表,最后用to_dict()把分组结果转为字典:

df_dict = df.groupby('A').apply(lambda y: [(x.B, x.C) for i, x in y.iterrows()]).to_dict()

方法二:更高效的实现(避免iterrows())

iterrows()在数据量大时效率偏低,我们可以直接对分组后的列用zip生成元组列表:

df_dict = df.groupby('A').apply(lambda g: list(zip(g['B'], g['C']))).to_dict()

问题原因说明

  1. 你用{(x.B, x.C) ...}生成的是集合,而目标需要的是有序的列表,所以要把大括号{}改成方括号[];
  2. groupby.apply()默认返回Series对象,而非字典,因此需要调用to_dict()完成格式转换。

这样修改后就能得到你期望的字典结构啦!

内容的提问来源于stack exchange,提问作者ZHICHEN GUO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:02:47