递归函数太慢,无法创建层次列表

时间:2019-02-08 09:54:41

标签: python pandas recursion

我有一个带有两列[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 /内存)

我正在寻找一种加快速度的方法

0 个答案:

没有答案