Я не совсем уверен, что вы подразумеваете под этой иерархией, вы можете построить график для цитаты достаточно просто:
In []:
article = ["A",'B','C','D','E','F','G','H']
quote = ['','A','A','C','C','','A','B']
d = {}
for a, q in zip(article, quote):
d.setdefault(q, []).append(a)
d
Out[]:
{'', ['A', 'F'], 'A': ['B', 'C', 'G'], 'B': ['H'], 'C': ['D', 'E']}
Вы можете визуализировать это с помощью простой рекурсивной функции:
def fn(g, n, depth=0):
print('{: >{width}}'.format(n, width=depth*4))
for nn in g.get(n, []):
fn(g, nn, depth+1)
In []:
fn(d, '')
Out[]:
A
B
H
C
D
E
G
F
Или вы можете отобразить как сеть, используя networkx
:
In []:
import networkx as nx
G = nx.Graph(d)
G.remove_node('')
nx.draw(G, with_labels=True)
Out[]:
![enter image description here](https://i.stack.imgur.com/lRlH1.png)
Вы можете создать DataFrame
, который вы ищете:
def fn(g, n):
q = [[n]]
while q:
p = q.pop()
if p[-1] not in d:
yield p
continue
for n in g[p[-1]]:
q.append(p + [n])
In []:
pd.DataFrame(list(reversed([(a, ','.join(q)) for _, a, *q in fn(d, '')])))
Out[]:
0 1
0 A B,H
1 A C,D
2 A C,E
3 A G
4 F
Который вы можете написать в Excel, используя возможности Panda.