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

如何用Pandas DataFrame列值为键,另一列所有值为值生成字典

问题:将Pandas DataFrame按列分组生成字典

给定如下Pandas DataFrame:

import pandas as pd

data = {"Column1":["a", "b", "a", "b", "a"], "Column2":["d","e","f", "g", "g"]}
df = pd.DataFrame(data)
print(df)

输出:

Column1 Column2
0       a       d
1       b       e
2       a       f
3       b       g
4       a       g

需要生成以Column1的值为键,Column2中对应所有值组成的列表为值的字典,期望结果:
{"a":["d","f","g"], "b":["e","g"]}

尝试使用dict(zip(df['Column1'], df['Column2']))时,仅得到每个键对应单个值的结果:{'a': 'g', 'b': 'g'}——这是因为字典键具有唯一性,后续出现的同键值会覆盖前面的,因此需要调整实现方式。

解决方案

方法1:Pandas原生groupby方法(推荐)

利用groupby分组后将每组值转为列表,再直接转成字典:

result = df.groupby('Column1')['Column2'].apply(list).to_dict()
print(result)
# 输出: {'a': ['d', 'f', 'g'], 'b': ['e', 'g']}

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

通过defaultdict自动为新键初始化空列表,遍历DataFrame追加对应值:

from collections import defaultdict

result_dict = defaultdict(list)
for key, val in zip(df['Column1'], df['Column2']):
    result_dict[key].append(val)

# 可选:转为普通字典
result = dict(result_dict)
print(result)
# 输出: {'a': ['d', 'f', 'g'], 'b': ['e', 'g']}

方法3:手动处理普通字典

无需额外库,通过判断键是否存在来初始化列表:

result_dict = {}
for key, val in zip(df['Column1'], df['Column2']):
    if key not in result_dict:
        result_dict[key] = []
    result_dict[key].append(val)

print(result_dict)
# 输出: {'a': ['d', 'f', 'g'], 'b': ['e', 'g']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:50:26