我在一个数据帧中有一个数据结构,它有3列:节点、父节点、前一个兄弟节点
我想创建完整数据结构的树文件夹,父节点和节点之间的级别不同,节点和previous_sibling之间的级别相同,兄弟节点之间的顺序正确。
因此,一个新的数据框、重新排序和一个新的列“级别”
当parent为null时,节点处于根级别当previous_sibling为null时这是第一个同级
下面是一个例子:
数据帧
应给出以下数据框架
这是我现在所做的,但不包括兄弟姐妹的顺序
def getDescendants(curr, par, level):
res = [[curr, par, level]]
children = json_dataframe_flat.query('parent == @curr')
for n in children.node:
if n != par:
deeper = getDescendants(n, curr, level + 1)
if len(deeper) > 0:
res.extend(deeper)
return res
result = pd.DataFrame(getDescendants('node0', '', 0), columns=['node', 'parent', 'level'])
print(result)
谢谢你的帮助
树状数据结构可以表示为 DAG,我们可以为其使用 networkx 库。这允许在迭代数据帧的行时逐步构建图形。同级信息可以存储在单独的 DAG 中,然后使用这些 DAG 以正确的顺序检索同级。
以下是一个示例脚本:
from collections import defaultdict
import networkx as nx
from networkx.algorithms.dag import dag_longest_path, dag_longest_path_length
_ = None
data = [
[0, _, _],
[1, _, 2],
[2, _, 0],
[3, 2, _],
[4, 1, 7],
[5, 2, 6],
[6, 2, 3],
[7, 1, _],
[8, 6, _],
]
G = nx.DiGraph() # main graph (tree)
S = defaultdict(nx.DiGraph) # graphs for siblings
for n, p, s in data:
if p is None:
G.add_node(n)
else:
G.add_edge(p, n)
if s is None:
S[p].add_node(n)
else:
S[p].add_edge(s, n)
class empty: # utility for printing the resulting tree
def __repr__(self): return ' '
empty = empty()
n_cols = 1 + dag_longest_path_length(G)
result = [[empty]*n_cols for _ in data]
def fill(node, row, col):
"""Fill the resulting table at position (row, col) and return number of rows used."""
result[row][col] = node
count = 1
for child in dag_longest_path(S[node]): # there is only one path
count += fill(child, row+count, col+1)
return count
row = 0
for node in sorted({n for n,d in G.in_degree() if d == 0}):
row += fill(node, row, 0)
from pprint import pprint
pprint(result)
这是输出:
[[0, , ],
[1, , ],
[ , 7, ],
[ , 4, ],
[2, , ],
[ , 3, ],
[ , 6, ],
[ , , 8],
[ , 5, ]]
如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?
如何获取此html片段中a的href值? 我需要根据I标记中的类获取它 我试过了,但没有结果
本文向大家介绍Python selenium 父子、兄弟、相邻节点定位方式详解,包括了Python selenium 父子、兄弟、相邻节点定位方式详解的使用技巧和注意事项,需要的朋友参考一下 今天跟大家分享下selenium中根据父子、兄弟、相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点、定位一个
我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。
我有一个这样的结构` ...等等,在