gpt4 book ai didi

python - 查找数据框中的所有依赖项

转载 作者:行者123 更新时间:2023-12-02 01:56:06 25 4
gpt4 key购买 nike

我有一个数据框:

       Parent   Child1  Child2  Child3  Child4  Child5  Child6
0 A A1 B2 -1 -1 -1 -1
1 B B1 -1 -1 -1 -1 -1
2 A1 -1 -1 C1 -1 -1 C2
3 D -1 C2 -1 A1 -1 -1
4 C1 -1 -1 -1 -1 -1 -1
5 C2 -1 -1 -1 -1 -1 -1
6 B1 -1 -1 -1 -1 -1 -1
7 B2 B3 B4 -1 -1 -1 -1
8 B3 -1 -1 -1 -1 -1 -1
9 B4 -1 -1 -1 -1 -1 -1

来源:

df = pd.DataFrame({'Parent': ['A','B','A1','D','C1','C2','B1','B2','B3','B4'],'Child1': ['A1','B1','-1','-1','-1','-1','-1','B3','-1','-1'], 'Child2': ['B2','-1','-1','C2','-1','-1','-1','B4','-1','-1'] , 'Child3' : ['-1','-1','C1','-1','-1','-1','-1','-1','-1','-1'] , 'Child4' : ['-1','-1','-1','A1','-1','-1','-1','-1','-1','-1'],'Child5' : ['-1','-1','-1','-1','-1','-1','-1','-1','-1','-1'] ,'Child6' : ['-1','-1','C2','-1','-1','-1','-1','-1','-1','-1']})

现在,我有一个包含几个父级的输入列表,例如 parent_list = ['A', 'B']。我需要找到所有这些 parent 的所有 child 。因此,对于“A”,有两个子项:A1 和 B2。 A1 又有两个 child “C1”和“C2”。但“C1”和“C2”没有 child (如果所有 child 都是“-1”,则他们没有 child ),而 B2 有两个 child -“B3”和“B4”。 B3 和 B4 都没有 child ,继续 B 只有一个 child :“B1”和“B1”没有 child 。

因此 ['A', 'B'] 的最终系列列表将是 ['A', 'B', 'A1', 'B2', ' C1'、'C2'、'B3'、'B4'、'B1']

这是我能达到的目标:

parent_list= ['A','B']
tmp_list = []
output_list = []
child_list= []

for i in parent_list:
output_list.append(i) if i not in output_list else output_list
parent_list.remove(i)
tmp_list = df.loc[df['Parent'] == i, ['Child1','Child2','Child3','Child4','Child5','Child6']].values.flatten().tolist()
while '-1' in tmp_list: tmp_list.remove('-1')
if tmp_list:
parent_list = parent_list + tmp_list

但是,我的代码仅在parent_list 中运行i = 'A' 并停止。我不确定为什么它不会进一步迭代。当我在第一次迭代后检查parent_list时,我确实看到了我想看到的内容,但没有发生循环。我哪里做错了?

此外,如果有更好的方法来解决这个问题,请提出建议。

最佳答案

我们可以melt数据帧,然后在 networkx 的帮助下创建一个有向图,然后使用 descendents方法在 parent_list

中查找每个父节点的所有子节点
import networkx as nx

s = df.melt('Parent').astype(str).query("value != '-1'")
G = nx.from_pandas_edgelist(s, 'Parent', 'value', create_using=nx.DiGraph())
family = parent_list + [d for n in parent_list for d in nx.descendants(G, n)]

>>> family

['A', 'B', 'C1', 'C2', 'B3', 'B2', 'B4', 'A1', 'B1']

关于python - 查找数据框中的所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69592841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com