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

如何将pandas DataFrame按两列作为键拆分为嵌套字典

Pandas 两列作为两级键生成嵌套字典的实现方法

你可以通过嵌套分组+字典推导式直接实现需求,代码如下:

import pandas as pd

# 示例数据
birdies = pd.DataFrame({'Habitat' : ['Captive', 'Wild', 'Captive', 'Wild'],
    'Animal': ['Falcon', 'Falcon','Parrot', 'Parrot'],
                   'Max Speed': [380., 370., 24., 26.],
                  'Color': ["white", "grey", "green", "blue"]})

# 生成两级嵌套字典
birdies_dict = {
    animal: {
        habitat: row[['Max Speed', 'Color']].to_dict('records')[0]
        for habitat, row in habitat_group.groupby('Habitat')
    }
    for animal, habitat_group in birdies.groupby('Animal')
}

调用测试结果完全符合要求:

  • birdies_dict["Falcon"]["Wild"] 输出:{'Max Speed': 370.0, 'Color': 'grey'}
  • birdies_dict["Falcon"] 输出:{'Captive': {'Max Speed': 380.0, 'Color': 'white'}, 'Wild': {'Max Speed': 370.0, 'Color': 'grey'}}

如果需要内层返回列表而非字典,可以修改内层生成逻辑:

# 内层为[Max Speed, Color]格式的列表
birdies_dict = {
    animal: {
        habitat: row[['Max Speed', 'Color']].values.tolist()[0]
        for habitat, row in habitat_group.groupby('Habitat')
    }
    for animal, habitat_group in birdies.groupby('Animal')
}

如果处理的数据量较大,推荐使用索引转字典的优化方案,性能更高:

# 大数据量优化版本
temp_dict = birdies.set_index(['Animal', 'Habitat'])[['Max Speed', 'Color']].to_dict('index')
birdies_dict = {}
for (animal, habitat), val in temp_dict.items():
    birdies_dict.setdefault(animal, {})[habitat] = val

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:03