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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:45:05