擅长:python、mysql、java
<p>这应该可以做到:</p>
<pre class="lang-py prettyprint-override"><code>def recursive_walk(df, node):
parents=df.loc[(df['df1']==node) & (df['df2']!=node), 'df2'].tolist()
if(len(parents)==0):
yield node
else:
for parent in parents:
yield parent
lst=[el for el in recursive_walk(df, parent)]
for el in lst:
yield el
df['tree']=df.apply(lambda x: list(set([el for el in recursive_walk(df, x['df2'])]+[x['df2']])), axis=1)
</code></pre>
<p>输出:</p>
^{pr2}$
<p>(*)我还检查了extended dataframe-它非常快,我不会共享输出,因为我的IDE正在截断它;)</p>