python - 通过唯一的 column1 column2 组合从 pandas 数据框中转储 JSON
问题描述
我在 SQL 数据库中有一些数据,我希望将其转换为 JSON。对于 grp1 和 grp2 的每个独特组合,我希望它列出 grp1、grp2 和名称。我猜正确的术语是嵌套的 JSON?
到目前为止,这是我的代码:
import pandas as pd
import json
json_string = '[{"grp1":"aaa","grp2":"streets","name":"Carter"},{"grp1":"aaa","grp2":"streets","name":"Chestnut"},{"grp1":"aaa","grp2":"streets","name":"Main"},{"grp1":"aaa","grp2":"aaa","name":"aaa"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_A"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_B"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_C"},{"grp1":"test1","grp2":"test2","name":"testname"}]'
a_json = json.loads(json_string)
df = pd.DataFrame.from_dict(a_json)
print(df)
g = df.groupby(['grp1', 'grp2']).size().reset_index().rename(columns={0:'count'})
g['combo'] = g['grp1'] + '-' + g['grp2']
print(g)
如何利用 json.dumps 吐出以下嵌套的 JSON?
{
"groups": [
{
"title": "aaa-aaa",
"items": [
{
"title": "aaa",
"combo3": "aaa-aaa-aaa"
}
]
},
{
"title": "aaa-streets",
"items": [
{
"title": "Carter",
"combo3": "aaa-streets-Carter"
},
{
"title": "Chestnut",
"combo3": "aaa-streets-Chestnut"
},
{
"title": "Main",
"combo3": "aaa-streets-Main"
}
]
},
{
"title": "aaa-ramps",
"items": [
{
"title": "Ramp_A",
"combo3": "aaa-ramps-Ramp_A"
},
{
"title": "Ramp_B",
"combo3": "aaa-ramps-Ramp_B"
},
{
"title": "Ramp_C",
"combo3": "aaa-ramps-Ramp_C"
}
]
},
{
"title": "test1-test2",
"items": [
{
"title": "testname",
"combo3": "test1-test2-testname"
}
]
}
]
}
解决方案
在最终将它们转换为 json 格式之前,您需要收集这些项目并将它们映射到一个临时字典。
这是运行代码:
json_string = '[{"grp1":"aaa","grp2":"streets","name":"Carter"},{"grp1":"aaa","grp2":"streets","name":"Chestnut"},{"grp1":"aaa","grp2":"streets","name":"Main"},{"grp1":"aaa","grp2":"aaa","name":"aaa"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_A"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_B"},{"grp1":"aaa","grp2":"ramps","name":"Ramp_C"},{"grp1":"test1","grp2":"test2","name":"testname"}]'
a_json = json.loads(json_string)
df = pd.DataFrame(a_json)
df['title'] = df['grp1'] + '-' + df['grp2']
df['combo3'] = df['grp1'] + '-' + df['grp2'] + '-' + df['name']
result_json = df[['title', 'name', 'combo3']].groupby(['title'])\
.apply(lambda x: x[['name', 'combo3']].rename(columns={'name': 'title'}).to_dict('r'))\
.reset_index()\
.rename(columns={0:'items'})\
.to_json(orient='records')
print(result_json)
输出:
[
{
"title": "aaa-aaa",
"items": [
{
"name": "aaa",
"combo3": "aaa-aaa-aaa"
}
]
},
{
"title": "aaa-ramps",
"items": [
{
"name": "Ramp_A",
"combo3": "aaa-ramps-Ramp_A"
},
{
"name": "Ramp_B",
"combo3": "aaa-ramps-Ramp_B"
},
{
"name": "Ramp_C",
"combo3": "aaa-ramps-Ramp_C"
}
]
},
{
"title": "aaa-streets",
"items": [
{
"name": "Carter",
"combo3": "aaa-streets-Carter"
},
{
"name": "Chestnut",
"combo3": "aaa-streets-Chestnut"
},
{
"name": "Main",
"combo3": "aaa-streets-Main"
}
]
},
{
"title": "test1-test2",
"items": [
{
"name": "testname",
"combo3": "test1-test2-testname"
}
]
}
]
推荐阅读
- mysql - SELECT COUNT with LIKE 给出奇怪的结果
- reactjs - redux 工具包 1.5.1 进行深度复制,但 8.0.4 immer 的校准产品在 react-native android 中不起作用
- c++ - 我需要拆分一串字符“AAABCAAABCDEAA”,这样它会导致“AA”“ABCAA”“ABCDEAA”
- javascript - 暗模式设置为本地存储
- python - 抓取 youtube 元数据时出现“NoneType”错误(python 的新功能)
- c - 我将 Quad 实现为 BST,但我尝试以这种方式拆分它,但效果不佳
- reactjs - 通过 Axios 使用 React Hooks 从 MySQL 获取数据
- python-3.x - Python 错误,'int' 对象不可下标
- html - 视频滑块已创建但无法正常工作
- python - 如果值超过特定字符长度,则从数据集中删除行