从我问的上一个问题来看,我想递归地创建和排序某个父/子层次结构。 在一位成员的大力帮助下,他为我找到了完成这项工作的解决方案。
但是,是的,有一个但是,输入文件是一个 .csv 文件,有 18 列。
以前的解决方案仅使用两列(父列和子列),输出文件仅获取这两列+我们创建的用于表示层次结构的列。
这是上一主题的链接: https://stackoverflow.com/questions/78364917/sort-hierarchic-parent-child-list-in-python
我的目标是简单地添加我的新列(使用之前的答案创建)并保留所有原始数据。
问题是:原始 .csv 文件中的数据没有任何唯一 ID,因此我无法将新旧 Dataframe 合并在一起。
我也尝试过手动添加列,这是代码:
def make_hierarchy(g):
G = nx.from_pandas_edgelist(g, create_using=nx.DiGraph,
source='REF_ARTICLE_PERE', target='REF_ARTICLE_FILS', **edge_attr=True**)
def dfs_with_level(node, level, order, parent_order, max_depth):
# Here I tried to modify the hierarchy_data squeletton, but no success
hierarchy_data = [(g.name, node, level, parent_order + f'{order:0{max_depth}d}')]
children = list(G.successors(node))
if children:
for i, child in enumerate(children, start=1):
hierarchy_data.extend(dfs_with_level(child, level + 1, i, parent_order + f'{order:0{max_depth}d}' + '.', max_depth))
return hierarchy_data
hierarchy_data = []
for node in G.nodes:
if not list(G.predecessors(node)):
max_depth = len(str(len(G)))
hierarchy_data.extend(dfs_with_level(node, 1, 1, '', max_depth))
# Here I tried to add columns in the dataframe, but they told me 4 cols passed, needed 5 somthing like this
df_hierarchy = pd.DataFrame(hierarchy_data, columns=['REF_PRODUIT', 'REF_ARTICLE_FILS', 'Level', 'sorted_order'])
# Add underscores to represent hierarchy levels visually (reverse order)
max_level = df_hierarchy['Level'].max()
df_hierarchy['Level'] = df_hierarchy['Level'].apply(lambda x: '_' * (x - 1) + str(x))
return df_hierarchy
df = pd.read_csv('input.csv')
out = df.groupby('REF_PRODUIT', group_keys=False).apply(make_hierarchy)
out.to_csv('output.csv', index=False)
我设置了edge_attr=Yes以保留图表中的所有列,但是问题出现在这一步之后。
在检查所有节点时,我想保留实际行的数据,并将其添加到df_hierarchy。
在调试器中我看到数据:
G.adj.values
但它是所有行的所有数据,而不仅仅是当前行的数据。
即使我找到了一种方法来获取当前行的数据(将其添加到新的 DF 中),我也不确定是否能够添加它......
我对所有这些数据操作都很陌生,我是一名学生,我们将不胜感激。
什么是 lia kha Gai 越南 be nhi 今天美好的一天也爱你们 snd 的意思是 acha choro sub baty krty hy ap sy bat kr rahi hu 热水浴缸之间的区别是