将数据框转换为 python 中的分层字典
convert dataframe with to hierarchical dictionary in python
我有分层结构的数据框:
df = pd.DataFrame(
{
'parent_id': [0,1,2,3,0,5,6,6],
'id': [1,2,3,4,5,6,7,8],
'title':['Math',
'Algebra',
'Polynomials',
'sum of polynomials',
'Physics',
'Mechanics',
'Kinematics ',
'Dynamics']
}
)
我table结构是:
id
parent_id
title
1
0
Math
2
1
Algebra
3
2
Polynomials
4
3
sum of polynomials
5
0
Physics
6
5
Mechanics
7
6
Kinematics
8
6
Dynamics
我需要获取分层字典:
SampleJSONData_2 = [
{
'id': 1,
'title': 'Math',
'subs': [
{
'id': 2,
'title': 'Algebra',
'subs': [
{
'id': 3,
'title': 'Polynomials',
'subs':
[
{
'id': 4,
'title': 'sum of polynomials',
}
]
}]
}]
},
{
'id': 5,
'title': 'Physics',
'subs': [
{
'id': 6,
'title': 'Mechanics',
'subs': [
{
'id': 7,
'title': 'Kinematics'
},
{
'id': 8,
'title': 'Dynamics'
}
]
}]
}
]
我该如何解决我的问题?
尝试:
def get_tree(df, parent=0):
out = []
for _, row in df[df.parent_id == parent].iterrows():
out.append({"id": row["id"], "title": row["title"]})
subs = df[df.parent_id == row["id"]]
if len(subs) > 0:
out[-1]["subs"] = get_tree(df, parent=row["id"])
return out
print(get_tree(df))
打印:
[
{
"id": 1,
"title": "Math",
"subs": [
{
"id": 2,
"title": "Algebra",
"subs": [
{
"id": 3,
"title": "Polynomials",
"subs": [{"id": 4, "title": "sum of polynomials"}],
}
],
}
],
},
{
"id": 5,
"title": "Physics",
"subs": [
{
"id": 6,
"title": "Mechanics",
"subs": [
{"id": 7, "title": "Kinematics "},
{"id": 8, "title": "Dynamics"},
],
}
],
},
]
我有分层结构的数据框:
df = pd.DataFrame(
{
'parent_id': [0,1,2,3,0,5,6,6],
'id': [1,2,3,4,5,6,7,8],
'title':['Math',
'Algebra',
'Polynomials',
'sum of polynomials',
'Physics',
'Mechanics',
'Kinematics ',
'Dynamics']
}
)
我table结构是:
id | parent_id | title |
---|---|---|
1 | 0 | Math |
2 | 1 | Algebra |
3 | 2 | Polynomials |
4 | 3 | sum of polynomials |
5 | 0 | Physics |
6 | 5 | Mechanics |
7 | 6 | Kinematics |
8 | 6 | Dynamics |
我需要获取分层字典:
SampleJSONData_2 = [
{
'id': 1,
'title': 'Math',
'subs': [
{
'id': 2,
'title': 'Algebra',
'subs': [
{
'id': 3,
'title': 'Polynomials',
'subs':
[
{
'id': 4,
'title': 'sum of polynomials',
}
]
}]
}]
},
{
'id': 5,
'title': 'Physics',
'subs': [
{
'id': 6,
'title': 'Mechanics',
'subs': [
{
'id': 7,
'title': 'Kinematics'
},
{
'id': 8,
'title': 'Dynamics'
}
]
}]
}
]
我该如何解决我的问题?
尝试:
def get_tree(df, parent=0):
out = []
for _, row in df[df.parent_id == parent].iterrows():
out.append({"id": row["id"], "title": row["title"]})
subs = df[df.parent_id == row["id"]]
if len(subs) > 0:
out[-1]["subs"] = get_tree(df, parent=row["id"])
return out
print(get_tree(df))
打印:
[
{
"id": 1,
"title": "Math",
"subs": [
{
"id": 2,
"title": "Algebra",
"subs": [
{
"id": 3,
"title": "Polynomials",
"subs": [{"id": 4, "title": "sum of polynomials"}],
}
],
}
],
},
{
"id": 5,
"title": "Physics",
"subs": [
{
"id": 6,
"title": "Mechanics",
"subs": [
{"id": 7, "title": "Kinematics "},
{"id": 8, "title": "Dynamics"},
],
}
],
},
]