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

如何在Pandas DataFrame中按key1聚合生成{key2:value}字典?

在Pandas中按分组生成{key2:value}形式的字典

首先,先确认你的初始DataFrame:

import pandas as pd

dat = pd.DataFrame({ 
    'key1' : [ 1, 1, 2, 2, 3, 3, 3, 3, 4, 4], 
    'key2' : ['a', 'b', 'a', 'c', 'b', 'c', 'd', 'e', 'c', 'e'], 
    'value' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
})

你已经知道可以用list聚合key2列,但现在需要每个key1分组对应一个以key2为键、value为值的字典,预期输出是每个分组对应类似{'a':1, 'b':2}这样的结构。

这里有两种简洁的实现方式,比先生成两个列表再组合更高效:

方法一:直接在groupby后用lambda+dict(zip())

这种方法最直观,对每个分组的子DataFrame,直接把key2和value的元素配对后转成字典:

result = dat.groupby('key1').apply(lambda x: dict(zip(x['key2'], x['value'])))

运行后得到的结果完全符合你的预期:

key1
1    {'a': 1, 'b': 2}
2    {'a': 3, 'c': 4}
3    {'b': 5, 'c': 6, 'd': 7, 'e': 8}
4    {'c': 9, 'e': 10}
dtype: object

方法二:先设索引再用to_dict()

另一种思路是把key2设为索引,然后对分组后的value列调用to_dict():

result = dat.set_index('key2').groupby('key1')['value'].apply(lambda x: x.to_dict())

这个方法和第一种效果完全一致,适合习惯用索引操作的场景。

这两种方法都不需要额外生成中间列表,直接一步完成分组转字典的操作,代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:46