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

如何从DataFrame生成保留重复索引全值的字典及最优实现方案

解决DataFrame转字典时保留重复索引对应所有值的问题

嘿,我明白你的需求了——你想把DataFrame转换成字典,让重复的键(A列的值)对应所有匹配的B列值组成的列表,而不是像df.set_index('A').to_dict('list')那样只保留最后一个值对吧?

最优实现方式

最简洁高效的方法是利用pandas的groupby功能,它专门用来处理分组聚合的场景,而且内部做了性能优化,比手动循环快很多:

先构造你的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 1, 2, 2, 2],
    'B': [1, 2, 3, 4, 5]
})

然后执行这行代码就能得到你想要的字典:

result_dict = df.groupby('A')['B'].apply(list).to_dict()

执行后result_dict就是:{1: [1, 2], 2: [3, 4, 5]}

原理解释

  • groupby('A'):按A列的每个唯一值分组,把相同A值的行归为一组
  • ['B'].apply(list):对每个分组里的B列数据,转换成列表形式
  • .to_dict():把分组后的Series直接转换成字典,键是A列的唯一值,值是对应B列的列表

备选方法(适合小数据集)

如果你的数据集很小,也可以用Python标准库的defaultdict手动循环实现,但性能不如groupby(尤其是大数据量时):

from collections import defaultdict

result = defaultdict(list)
for a, b in zip(df['A'], df['B']):
    result[a].append(b)

# 转成普通字典(可选)
result_dict = dict(result)

但还是更推荐groupby的方式,因为它既简洁又高效,完全符合pandas的惯用写法,可读性也更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:20