python-3.x - 将字典嵌套在另一个字典中,按 Pandas Dataframe 中的值分组
问题描述
在上一个问题中:在另一个字典中嵌套一个计数器,其中键是数据框列,@Jezrael 向我展示了如何在另一个字典中嵌套一个计数器。
我的数据框有另一列,它实际上是 ID 的超集,并且没有以允许从 ID 逻辑派生 SuperID 的方式命名。
SuperID ID Code
E1 E1023 a
E1 E1023 b
E1 E1023 b
E1 E1023 b
E1 E1024 b
E1 E1024 c
E1 E1024 c
E2 E1025 a
E2 E1025 a
E2 E1026 b
使用上一阶段制作的词典,
d = {k: v.value_counts().to_dict() for k, v in df.groupby('ID')['Code']}
print (d)
{'E1023': {'b': 3, 'a': 1}, 'E1024': {'c': 2, 'b': 1}, 'E1025 : {'a' : 2},
'E1026 : {'b' : 2}}
我想执行另一个级别的嵌套,其中 SuperID 是外部字典的键,内部字典是上面生成的字典,ID 按 SuperID 分组。所以字典应该有效地采用以下格式:
new_d = {k: v for k in df.SuperID, v in df.groupby('SuperID')[ID FROM d]}
{'E1': {'E1023': {'b':3, 'a':1}, 'E1024' : {'c':2, 'b': 1}...} 'E2': {'E1025: {'a' : 2}...}}
我想保留由@Jezrael 制作的原始字典,以允许我通过 ID 执行简单的查找,我需要在稍后阶段执行此操作。
解决方案
使用嵌套字典理解:
d = {k: {k1: v1.value_counts().to_dict() for k1, v1 in v.groupby('ID')['Code']}
for k, v in df.groupby('SuperID')}
print (d)
{'E1': {'E1023': {'b': 3, 'a': 1}, 'E1024': {'c': 2, 'b': 1}},
'E2': {'E1025': {'a': 2}, 'E1026': {'b': 1}}}
推荐阅读
- python - 在 sympy 的 while 循环中,行未添加到矩阵
- python - ImageGrab.grab(bbox()) 不返回 RGB 值
- android - 如何在 RecyclerView 项目模板中定位矢量图像
- php - 数组查找重复值,其中某个值在某个值处重复
- reactjs - componentWillMount 和 componentDidMount 之间会发生什么?
- javascript - 如何在 React Js 中使用 map 实现嵌套循环
- python - 如何使用 PUT 方法编辑序列化数据
- jersey - 是否可以全局设置 JSON-B (Yasson) 中的默认日期格式,而不是在每个属性上添加注释?
- javascript - Mongodb不保存数据
- python - 使用 scikit 在 python 上将图像转换为灰度