我对PYTHON中父母/子女关系中的层级管理有一个小问题.
为了给出一些上下文,我有一个由x个字段组成的表.以下是我感兴趣的:
- 产品_id
- parent_ref
- child_ref
该表代表了多种产品的扁平 struct (产品_id =汽车型号).
第一个父母是身体,我们在上面安装门、发动机支架、发动机,发动机本身由数百个零件组成等等..
一些车型重复使用其他车辆的零部件,相同的发动机、相同的离合.
这是我的 case ,我有一个大约180万行的文件,向我展示了我每个产品的 struct .
我想创建一个"级别"的概念,它是根据 struct 中的位置计算的.例如,我知道所有第一个子级(即级别1)在父列中的值都为"-1".
`Ex:
Product_id Parent_ref child_ref
BMW316E46 -1 15G0001-013 --> First parent
BMW316E46 -1 15G0001-014 --> Second parent
BMW316E46 15G0001-013 14G0009-001 --> First parent first child...
BMW316E46 15G0001-013 14G0017-001 --> First parent second child...
BMW316E46 15G0001-013 14G0018-001` --> Each child can be (or not) a parent as well
我的目标是 for each 产品(Products_id)制定一个 struct ,每个子元素都有一个级别列,这将取决于父母,并且是视觉的.换句话说,子元素的身份是相对于父母的(我事先不知道可能有多少个级别).
类似于这样的:
Product_id Parent_ref Child_ref Level (with visual identation)
BMW316E46 -1 15G0001-013 1
BMW316E46 15G0001-013 14G0009-001 __2
BMW316E46 15G0001-013 14G0017-001 __2
BMW316E46 14G0017-001 14G0017-001 ____3
BMW316E46 -1 15G0001-014 1
BMW316E46 15G0001-014 14G0009-001 __2
BMW316E46 15G0001-014 14G0017-001 __2
我在Python中try 了类似的事情, for each 循环创建一个数组,以找出不同的子元素,但它只适用于第一个循环,因为我需要分开每个父母的不同子元素.
df = pd.read_csv("file.csv")
for index, row in df.iterrows():
if row['parent_ref'] == "'-1":
array_lvl_1.append(row['child_ref'])
parent_level = alc[count]
df.loc[index, 'level'] = parent_level
count += 1
for index, row in df.iterrows():
if row['parent_ref'] in array_lvl_1:
for value in array_lvl_1:
array_lvl_1_1.append(row['child_ref'])
df.loc[index, 'level'] = alc[count2]
count2 += 1
但它不是循环的,它迫使我创建与级别一样多的表,而且我事先不知道级别的数量.