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

如何基于pandas DataFrame生成以首列值为父键的嵌套字典

Pandas 三列查找表转指定结构嵌套字典实现方法

实现代码

假设你的查找表DataFrame命名为lookup_df,三列对应列名分别为A、B、C,一行代码即可完成转换:

result_dict = lookup_df.groupby('A').apply(lambda x: dict(zip(x['B'], x['C']))).to_dict()

逻辑说明

  • 按A列分组,将同一父键(如示例中的apple、pear、liver)对应的所有行聚合为一组
  • 每组内部将B列的编码值作为子字典的键,C列的实际含义作为子字典的值,生成对应子字典
  • 最终将分组聚合后的结果转换为顶层字典,完全匹配需求的结构

测试验证示例

可通过以下示例代码验证效果,和你给出的示例数据完全对应:

import pandas as pd

# 构造测试查找表
lookup_df = pd.DataFrame({
    'A': ['apple', 'apple', 'apple', 'pear', 'pear', 'liver', 'liver', 'liver'],
    'B': [1, 2, 3, 1, 2, 1, 2, 3],
    'C': ['happy', 'sad', 'not', 'new', 'old', 'run', 'fire', 'old']
})

# 执行转换
result_dict = lookup_df.groupby('A').apply(lambda x: dict(zip(x['B'], x['C']))).to_dict()

# 输出验证
print(result_dict)
# 输出结果:{'apple': {1: 'happy', 2: 'sad', 3: 'not'}, 'pear': {1: 'new', 2: 'old'}, 'liver': {1: 'run', 2: 'fire', 3: 'old'}}

注意事项

如果查找表存在A列+B列组合重复的情况,可提前对查找表去重,避免值被覆盖:

# keep参数可指定保留第一个还是最后一个重复值,last为保留最后一个,first为保留第一个
lookup_df = lookup_df.drop_duplicates(subset=['A', 'B'], keep='last')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:04