Dataframe到Dictionary分组,键/值是其他列

2024-06-14 02:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

朋友们,支持我的观点。我有这样一个数据帧:

+-------+--------------------------+------+-------+------+
| index |                specialty | code | count | rank |
+-------+--------------------------+------+-------+------+
| 19    | Colon and Rectal Surgery | 1557 | 36    | 5.0  |
+-------+--------------------------+------+-------+------+
| 22    | Surgical Oncology        | 1557 | 22    | 14.0 |
+-------+--------------------------+------+-------+------+
| 147   | Hematology               | 2057 | 383   | 13.0 |
+-------+--------------------------+------+-------+------+
| 753   | Oncology                 | 1578 | 74    | 15.0 |
+-------+--------------------------+------+-------+------+
| 1089  | Dental General Practice  | 1257 | 6     | 2.5  |
+-------+--------------------------+------+-------+------+

每个专业有多个条目——即我有专业X代码的计数和等级,最高等级为25

我尝试使用lamba函数按专业分组,但我不知道如何将列添加为键/值并创建dict列表,而不仅仅是一个巨大的dict

d = (df2.groupby('specialty').apply(lambda x: dict(zip(x['code'], x['Rank']))).to_dict())

print(d)

{'Acute Care Hospital': {
    1562: 8.0, 
    1554: 11.0, 
    6095: 8.0, 
    119114: 1.0, 
    119117: 5.5, 
    284051: 4.0, 
    562577: 11.0, 
    582646: 8.0, 
    1631305: 2.0, 
    1641114: 5.5, 
    1751592: 3.0, 
    1873207: 11.0
}

如何将列保留为键,如这样,并将其作为每个专业的列表:

[
    {'specialty': Acute Care Hospital', 
    [
        {'code': 1562, 'rank': 8.0, 
        'code': 1554, 'rank' :11.0, 
        'code': 6095, 'rank': 8.0, 
        'code': 119114, 'rank' 1.0, 
        'code': 119117, 'rank': 5.5, 
        'code': 284051, 'rank': 4.0, 
        'code': 562577, 'rank': 11.0, 
        'code': 582646, 'rank' 8.0, 
        'code': 1631305, 'rank': 2.0, 
        'code': 1641114, 'rank': 5.5, 
        'code': 1751592, 'rank': 3.0, 
        'code': 1873207, 'rank': 11.0}
    ]
    }
]

Tags: 数据列表index专业count朋友codedict
1条回答
网友
1楼 · 发布于 2024-06-14 02:49:58

您发布的结果将不起作用,因为它包含重复的键。下面的解决方案可能正是您想要的,因为它使代码秩对可以从字典中调用

这一级在主级特性下创建另一个字典级,其中代码和秩对位于数组中的同一索引上:

df.groupby('specialty').apply(lambda x: {'code':x['code'].values,'Rank':x['Rank'].values}).to_dict()

或者下一个简单地从groupby获取结果,并将其放置在密钥代码\u rank\u对下:

df.groupby('specialty').apply(lambda x: {'code_rank_pair':x.loc[:,['code','Rank']]}).to_dict()

相关问题 更多 >