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

