Python数据框架从父子级填充分层级别
我有以下包含父子关系的数据帧:Python数据框架从父子级填充分层级别,python,pandas,recursion,Python,Pandas,Recursion,我有以下包含父子关系的数据帧: data = pd.DataFrame({'Parent':['a','a','b','c','c','f','q','z','k'], Child':['b','c','d','f','g','h','k','q','w']}) a ├── b │ └── d └── c ├── f │ └── h └── g z └── q └── k └── w 我想获得一
data = pd.DataFrame({'Parent':['a','a','b','c','c','f','q','z','k'],
Child':['b','c','d','f','g','h','k','q','w']})
a
├── b
│ └── d
└── c
├── f
│ └── h
└── g
z
└── q
└── k
└── w
我想获得一个新的数据框,其中包含例如父级“a”的所有子级:
小孩
一级
二级
x级
D
A.
B
-
B
A.
-
-
C
A.
-
-
F
A.
C
-
H
A.
C
F
G
A.
C
-
我建议
- 构建每个
子项:父项列表
- 构建
,为每个父级提供一个数据帧
名称级别
根据您在数据帧词典中发布的代码行,人们如何知道
'd'
是'b'
的子代?我在您的图表中看到了它,但是您拥有的或正在输入的数据如何显示这种关系?啊,nvm我现在明白了-第一个家长是第一个孩子的家长,第二个家长是第二个孩子的家长,等等。所以d是第四个孩子,第四个家长的孩子也是
import pandas as pd
values = {'Parent': ['a', 'a', 'b', 'c', 'c', 'f', 'q', 'z', 'k'],
'Child': ['b', 'c', 'd', 'f', 'g', 'h', 'k', 'q', 'w']}
relations = dict(zip(values['Child'], values['Parent']))
def get_parent_list(element):
parent = relations.get(element)
return get_parent_list(parent) + [parent] if parent else []
all_relations = {
children: {f'level_{idx}': value for idx, value in enumerate(get_parent_list(children))}
for children in set(values['Child'])
}
df = pd.DataFrame.from_dict(all_relations, orient='index')
print(df)
level_0 level_1 level_2
b a NaN NaN
f a c NaN
d a b NaN
g a c NaN
h a c f
q z NaN NaN
k z q NaN
w z q k
c a NaN NaN