我有一个带有两列[Key,Parent]的Pandas DataFrame
key_x parent_x1
parent_x1 parent_x2
key_y parent_y1
parent_x2 parent_x3
key_z parent_z1
parent_z4 parent_z5
parent_x3 parent_x4
parent_x4 parent_x5
parent_x5 parent_x5 #last parent (same keys)
...
我想通过这种方式从数据框重建每个“叶子”条目的层次结构列表:
[key_x1, parent_x2, parent_x3, parent_x4, parent_x5]
[key_y1, parent_y2, parent_y3, parent_y4, parent_y5]
[key_z1, parent_z2, parent_z3, parent_z4, parent_z5]
....
我尝试了此递归函数:
def _get_parent(df, val, tree=[]):
#this is the last parent: return the final tree
if (val not in df.index) or (val == df.loc[val,"Parent"]):
return tree
#save the current entry and get the next parent recurively
tree.append(val)
return _get_parent(df, df.loc[val,"Parent"],tree)
我将这种方式用于数据框的方式是
keys= []
for index, _ in df.iterrows():
# if it does not appear as a parent, get all its parents
if index not in df.Parent.values:
keys.append(_get_parent(df,index,[]))
print(Keys)
此代码可以正常工作,但看起来非常慢,例如,一个100k数据帧大约需要3分钟。 (常规CPU /内存)
我正在寻找一种加快速度的方法