首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多列转换为熊猫嵌套词典列表

将多列转换为熊猫嵌套词典列表
EN

Stack Overflow用户
提问于 2022-05-26 16:47:30
回答 1查看 32关注 0票数 0

我有一只熊猫数据图,看上去如下所示

代码语言:javascript
复制
category    sub_cat     vitals      value
HR          EKG         HR_EKG      136
SPO2        SPO2        SpO2_1      86
HR          PPG         HR_PPG_1    135
SPO2        PI          PI_1        4.25
HR          PPG         HR_PULSED   135
NIBP        SBP         NIBPS       73
NIBP        DBP         NIBPD       25
NIBP        MBP         NIBPM       53

我想按类别和sub_cat列分组,并将其转换为嵌套字典列表,如下所示

代码语言:javascript
复制
[{
    "HR":
    {
        "EKG":
        {
            "HR_EKG": 136
        },
        "PPG":
        {
            "HR_PPG_1": 135,
            "HR_PULSED": 135
        }
    }
  },
  {
    "NIBP":
    {
        "SBP":
        {
            "NIBPS": 73
        },
        "DBP":
        {
            "NIBPD": 25
        },
        "MBP":
        {
            "NIBPM": 53
        }
    }
  },
  {
    "SPO2":
    {
        "SPO2":
        {
            "SpO2_1": 86
        },
        "PI":
        {
            "PI_1": 4.25
        }
    }
}]

我可以按(类别、生命周期和值)或(子类别、要害值和值)分组,但不能按所有4列分组。这就是我尝试过的,并适用于3列。

代码语言:javascript
复制
df = df.groupby(['sub_cat']).apply(lambda x: dict(zip(x['vitals'], x['value'])))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 16:54:40

一系列嵌套的groupby + apply + to_dict调用将完成此任务:

代码语言:javascript
复制
dct = df.groupby('category').apply(
    lambda category: category.groupby('sub_cat').apply(
        lambda sub_cat: sub_cat.set_index('vitals')['value'].to_dict()
    ).to_dict()
).to_dict()

输出:

代码语言:javascript
复制
>>> import json
>>> print(json.dumps(dct, indent=4))
{
    "HR": {
        "EKG": {
            "HR_EKG": 136.0
        },
        "PPG": {
            "HR_PPG_1": 135.0,
            "HR_PULSED": 135.0
        }
    },
    "NIBP": {
        "DBP": {
            "NIBPD": 25.0
        },
        "MBP": {
            "NIBPM": 53.0
        },
        "SBP": {
            "NIBPS": 73.0
        }
    },
    "SPO2": {
        "PI": {
            "PI_1": 4.25
        },
        "SPO2": {
            "SpO2_1": 86.0
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72395299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档