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

Python中使用groupby将pandas DataFrame转换为嵌套字典的方法

实现代码

首先若需要size字段和目标结构一致为数字类型,可先做类型转换,核心转换逻辑如下:

import pandas as pd

# 原始DataFrame定义
my_df = pd.DataFrame(
    [["123456", "a", "80", False, "beta", None, None], 
     ["123456", "b", "80", False, "beta", None, None],
     ["7891011", "a", "80", False, "beta", None, None], 
     ["7891011", "b", "80", False, "beta", None, None]], 
    columns = ["device", "variable", "size", "manual", "method","nrow", "ncol"]
)

# 可选:将size从字符串转为整数
my_df['size'] = my_df['size'].astype(int)

# 基于groupby的转换代码
result = my_df.groupby('device').apply(
    lambda df: df.set_index('variable')[['size', 'manual', 'method', 'nrow', 'ncol']].to_dict('index')
).to_dict()

运行后输出的result完全符合你需要的嵌套字典结构。


原代码问题说明

你之前尝试的my_df.groupby(["device", "variable"]).apply(list).to_dict()会生成键为(device, variable)元组、值为行内容列表的单层字典,和要求的两层嵌套结构不符。上述方案先按第一层键device分组,每个分组内再把variable设为第二层键,剩余字段作为属性字典,正好匹配目标结构。


更高效率的替代方案(无需groupby)

如果数据量较大,用多级索引配合字典推导式的性能会更优:

my_df = my_df.set_index(['device', 'variable'])
result = {
    dev: my_df.xs(dev, level='device')[['size', 'manual', 'method', 'nrow', 'ncol']].to_dict('index')
    for dev in my_df.index.unique(level='device')
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:36:04