回到我的bs,朋友们。我有一个这样的数据框:
+-------+--------------------------+------+-------+------+
| 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都有多个条目-例如,我具有专业X的代码数和排名,最高为25。
我正在尝试使用lamba函数按专业分组,但我不知道如何将列添加为键/值并创建字典列表,而不仅仅是一个巨大的字典。
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}
]
}
]
答案 0 :(得分:1)
您发布的结果将不起作用,因为它包含重复的键。以下解决方案可能是您所追求的,因为它可以使字典中的代码等级对可调用。
这将在主级别专长下创建另一个词典级别,其中代码和等级对在数组中的同一索引上:
df.groupby('specialty').apply(lambda x: {'code':x['code'].values,'Rank':x['Rank'].values}).to_dict()
或者下一个简单地从groupby获得结果并将其放在键code_rank_pair下:
df.groupby('specialty').apply(lambda x: {'code_rank_pair':x.loc[:,['code','Rank']]}).to_dict()