I'm not quite sure what you mean by making this hierarchy, you can build a Graph for the quoting simply enough:
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']}
You can visualize this with a simple recursive function:
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
Or you can display as a network using networkx
:
In []:
import networkx as nx
G = nx.Graph(d)
G.remove_node('')
nx.draw(G, with_labels=True)
Out[]:

You can create the DataFrame
you are looking for:
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
Which you can write to Excel using Panda's capabilities.