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

将含重复键的Pandas DataFrame转换为字典的问题

解决Pandas DataFrame转字典(重复键对应值列表)的问题

嘿,这个坑我之前踩过!你原来的代码之所以只保留每个键的最后一个值,是因为set_index遇到重复索引时,虽然表面上保留了所有行,但当你转置(.T)再用to_dict('list')时,重复的列名(也就是原来的重复键)会被最后一次出现的覆盖,所以最终字典里每个键只剩最后一个值。

下面给你几种简单靠谱的实现方法:

方法1:Pandas原生分组聚合(最推荐)

这是最符合Pandas风格的写法,一行代码搞定:

mydict = df.groupby('Keys')['Values'].agg(list).to_dict()

原理:

  • groupby('Keys'):按Keys列的唯一值分组
  • agg(list):把每组对应的Values值聚合成一个列表
  • to_dict():直接把分组后的Series转换成你需要的字典格式

运行后就能得到你想要的结果:{1: [1,6,9], 2: [3], 3: [1,4]}

方法2:用collections.defaultdict手动遍历

如果你喜欢更直观的循环处理,可以用Python标准库的defaultdict:

from collections import defaultdict

# 初始化默认值为列表的字典
mydict = defaultdict(list)
# 遍历DataFrame的每一行
for key, val in df.itertuples(index=False):
    mydict[key].append(val)

# 可选:如果需要转成普通字典(而非defaultdict类型)
mydict = dict(mydict)

这种方法逻辑清晰,适合需要在遍历过程中做额外处理的场景。

方法3:用apply替代agg

和方法1类似,只是把agg(list)换成apply(list),效果完全一样:

mydict = df.groupby('Keys')['Values'].apply(list).to_dict()

选哪种全看个人代码习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:49