擅长:python、mysql、java
<p>在这个答案中,我假设你的直接父母总是排在你自己的上面,因为这是你期望的结果和你的图表所暗示的。你知道吗</p>
<p>根据这个假设,我们可以为每一行取最接近的一行,其级别低于该行:</p>
<pre><code>import pandas as pd
data={"Symbol":["A", "A01", "A01B", "A01B 1/00", "A01B 1/02", "A01B 1/022", "B"], "level":[2,4,5,7,8,9,2]}
df=pd.DataFrame(data=data)
df['Parent'] = ''
for index, row in df.iterrows():
# We look at the potential parents
potential_parents = df.loc[df.index.isin([x for x in range(index)]) & (df['level'] < row['level']), 'Symbol']
# And we take the last one as our parent
if len(potential_parents) == 0:
df.loc[index, 'Parent'] = ''
else:
df.loc[index, 'Parent'] = potential_parents.iloc[-1]
</code></pre>
<p>输出:</p>
<pre><code> Symbol level Parent
0 A 2
1 A01 4 A
2 A01B 5 A01
3 A01B 1/00 7 A01B
4 A01B 1/02 8 A01B 1/00
5 A01B 1/022 9 A01B 1/02
6 B 2
</code></pre>