如何在Python层级数据生成结果中添加issue字段?
解决方案
核心问题在于原脚本将所有issue的数据合并到同一图中,导致无法区分不同问题的层级路径。我们需要按issue分组处理,每个分组单独构建图并提取路径,最后关联对应的问题ID。
修改后的完整代码
import networkx as nx import pandas as pd import numpy as np # 假设原始数据已加载到df中(替换为你的数据加载逻辑) # df = pd.read_csv("your_data.csv") all_results = [] # 按issue分组处理每个子数据集 for issue_id, group_df in df.groupby('issue'): # 为当前issue构建独立的有向图 G = nx.from_pandas_edgelist(group_df, source='father', target='son', create_using=nx.DiGraph, edge_attr=True) # 识别当前图的根节点(入度为0)和叶节点(出度为0) roots = [v for v, d in G.in_degree() if d == 0] leaves = [v for v, d in G.out_degree() if d == 0] # 提取所有简单路径 issue_paths = [] for root in roots: for leaf in leaves: paths = nx.all_simple_paths(G, root, leaf) issue_paths.extend(paths) # 处理自环节点(如果存在) for node in nx.nodes_with_selfloops(G): issue_paths.append([node, node]) # 转换路径为DataFrame并格式化 path_df = pd.DataFrame(sorted(issue_paths)).add_prefix('Value_Depend_On_ID_').fillna('') path_df = path_df.replace('', np.nan, regex=True).astype('Int64') # 添加当前issue字段 path_df['issue'] = issue_id # 收集当前issue的结果 all_results.append(path_df) # 合并所有结果并输出 final_df = pd.concat(all_results, ignore_index=True) print(final_df)
关键修改说明
- 分组处理:通过
groupby('issue')将数据按问题ID拆分,每个问题单独构建图,避免不同问题的层级结构互相干扰 - 关联issue字段:每个分组处理完成后,为路径DataFrame添加对应的
issue列 - 合并结果:将所有问题的处理结果合并为最终表格,保证输出格式与期望一致
输出示例
运行代码后将得到如下结果:
| Value_Depend_On_ID_0 | Value_Depend_On_ID_1 | Value_Depend_On_ID_2 | issue |
|---|---|---|---|
| 33 | 34 | 35 | 1 |
| 33 | 34 | 2 |
内容的提问来源于stack exchange,提问作者eliran
相关产品推荐
相关产品推荐

