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

如何将Pandas DataFrame转换为指定格式的嵌套字典?

Pandas DataFrame转指定嵌套字典的实现方法

原始DataFrame结构

首先定义示例中的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'id': ['a1', 'a1', 'a1', 'b1', 'b1', 'b1', 'c1', 'c1', 'c1'],
    'val': ['ab', 'aa', 'ca', 'cc', 'kf', 'ff', 'wer', 'iid', 'ff'],
    'label': ['first', 'second', 'third', 'first', 'second', 'third', 'first', 'second', 'third']
})

转换需求

将上述DataFrame转换为嵌套字典:

  • 外层字典以id列的值为键
  • 对应值为嵌套字典,该字典以label列的值为键,val列的值为集合

目标格式如下:

{
    "a1": {"first": {"ab"}, "second": {"aa"}, "third": {"ca"}},
    "b1": {"first": {"cc"}, "second": {"kf"}, "third": {"ff"}},
    "c1": {"first": {"wer"}, "second": {"iid"}, "third": {"ff"}},
}

实现方法

方法一:GroupBy+嵌套字典推导(简洁健壮)

利用Pandas的groupby分组功能,结合字典推导快速构建目标结构,同时支持同一id+label下多val的场景:

result = {
    idx: {label: set(vals) for label, vals in group.groupby('label')['val']}
    for idx, group in df.groupby('id')
}

方法二:逐行循环构建(逻辑直观)

如果偏好显式逻辑,可以逐行遍历DataFrame,逐步填充字典:

result = {}
for _, row in df.iterrows():
    id_val = row['id']
    label_val = row['label']
    val_val = row['val']
    
    # 初始化外层字典的键
    if id_val not in result:
        result[id_val] = {}
    # 初始化内层字典的键(空集合)
    if label_val not in result[id_val]:
        result[id_val][label_val] = set()
    # 将val添加到对应集合
    result[id_val][label_val].add(val_val)

验证结果

执行上述代码后,打印result即可得到符合要求的嵌套字典:

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:25:26