如何用Python从DataFrame列生成类与名称映射字典?
Got it! 这里有几种实用的方法帮你把DataFrame里的class和name列转换成你需要的映射字典,都是Python里处理这类需求的常规操作,一起来看:
方法1:用pandas的groupby一步到位(推荐)
这是最简洁高效的方式,直接借助pandas的分组能力,几行代码就能搞定:
import pandas as pd # 先构造你的示例DataFrame df = pd.DataFrame({ 'class': ['Pref', 'Val', 'Base', 'Pref', 'Base'], 'name': ['Ab', 'BE', 'es', 'Cw', 'SS'] }) # 生成目标映射字典 class_name_map = df.groupby('class')['name'].apply(list).to_dict() print(class_name_map)
运行后会输出你想要的格式:{'Base': ['es', 'SS'], 'Pref': ['Ab', 'Cw'], 'Val': ['BE']}
简单解释下原理:
groupby('class')会把DataFrame里class值相同的行归为一组apply(list)把每组里的name列数据转换成列表- 最后
to_dict()直接把分组结果转换成你需要的字典格式
如果需要保持class的顺序和原始DataFrame里首次出现的顺序一致(比如先Pref、再Val、再Base),可以给groupby加个sort=False参数(pandas 1.3.0及以上版本支持):
class_name_map = df.groupby('class', sort=False)['name'].apply(list).to_dict()
方法2:手动遍历构建字典(适合理解逻辑)
如果你想更直观地理解映射构建的过程,可以手动循环DataFrame的每一行来构建字典:
class_name_map = {} for _, row in df.iterrows(): cls = row['class'] name = row['name'] # 如果当前class还没作为键存在,就创建一个空列表 if cls not in class_name_map: class_name_map[cls] = [] # 把对应的name添加到列表里 class_name_map[cls].append(name) print(class_name_map)
这种方法逻辑直白,适合新手理清思路,数据量不大的时候使用完全没问题。
内容的提问来源于stack exchange,提问作者Shuvayan Das
相关产品推荐
相关产品推荐

