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