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

