python - 将熊猫数据框放入嵌套子字典
问题描述
我有一个如下所示的数据框,其中每个“级别”都深入到更多细节,最后一个级别有一个 id 值。
data = [
{'id': 1, 'level_1': 'Animals', 'level_2': 'Carnivores', 'level_3': 'Felidae', 'level_4', 'Siamese Cat'},
{'id': 2, 'level_1': 'Animals', 'level_2': 'Carnivores', 'level_3': 'Felidae', 'level_4', 'Javanese Cat'},
{'id': 3, 'level_1': 'Animals', 'level_2': 'Carnivores', 'level_3': 'Ursidae', 'level_4', 'Polar Bear'},
{'id': 4, 'level_1': 'Animals', 'level_2': 'Carnivores', 'level_3': 'Canidae', 'level_4', 'Labradore Retriever'},
{'id': 5, 'level_1': 'Animals', 'level_2': 'Carnivores', 'level_3': 'Canidae', 'level_4', 'Golden Retriever'}
]
我想把它变成一个嵌套的父/子关系字典,如下所示。
var data = {
"name": "Animals",
"children": [
{
"name": "Carnivores",
"children": [
{
"name": "Felidae",
"children": [
{
"id": 1,
"name": "Siamese Cat",
"children": []
},
{
"id": 2,
"name": "Javanese Cat",
"children": []
}
]
},
{
"name": "Ursidae",
"children": [
{
"id": 3,
"name": "Polar Bear",
"children": []
}
]
},
{
"name": "Canidae",
"children": [
{
"id": 4,
"name": "Labradore Retriever",
"children": []
},
{
"id": 5,
"name": "Golden Retriever",
"children": []
}
]
}
]
}
]
}
我尝试了几种对数据框进行分组并循环遍历各个行的方法,但还没有找到可行的解决方案。任何帮助将不胜感激!
解决方案
@Timus 的答案模仿了您的意图,但是您在搜索此词典时可能会遇到一些困难,因为每个级别都有一个 keyname
和一个 key children
。如果这是您的意图,请忽略我的回答。但是,如果您想创建一个可以更轻松地通过唯一键搜索的字典,您可以尝试:
df = df.set_index(['level_1', 'level_2', 'level_3', 'level_4'])
def make_dictionary(df):
if df.index.nlevels == 1:
return df.to_dict()
dictionary = {}
for key in df.index.get_level_values(0).unique():
sub_df = df.xs(key)
dictionary[key] = df_to_dict(sub_df)
return dictionary
make_dictionary(df)
它需要将不同的级别设置为索引,您最终会得到一个稍微不同的字典:
{'Animals':
{'Carnivores':
{'Felidae':
{'id': {'Siamese Cat': 1,
'Javanese Cat': 2}},
'Ursidae':
{'id': {'Polar Bear': 3}},
'Canidae':
{'id': {'Labradore Retriever': 4,
'Golden Retriever': 5}}}
}
}
推荐阅读
- performance - Libreoffice / openoffice 服务代理
- c# - 在 SQL Server Management Studio 中创建存储过程时出现语法错误
- watson-studio - 在 Watson Studio 中为 Visual Recognition 框检测标记数据时出错
- android - WebView 在 HTTPS url 上显示 net::ERR_CLEARTEXT_NOT_PERMITTED
- python - 在 os.path.join() 函数中包含通配符以创建文件路径
- android - Andriod Gradle Sync 离线模式失败
- python - 如何使用python从网站实时获取一些数据?
- office365 - 适用于 Web 应用程序的 Office 365 JSON 接口的文档
- amazon-web-services - 更新堆栈时使用现有的 DBUser 和 DBPassword 参数值
- cross-validation - 如何在 k-fold CV 设置中组织 Ray Tune Trainable 类计算?