如何用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
相关产品推荐
相关产品推荐

