技术需求:用Python实现Excel中父站点的多级子站点数量统计
解决方案
核心思路
这是典型的树形结构遍历问题,先构建父站点到直接子站点的映射关系,再通过**广度优先搜索(BFS)**遍历每个父站点的所有多级子站点,统计总数(用BFS可避免递归深度溢出问题)。
完整代码实现
import pandas as pd from collections import defaultdict # 1. 读取Excel文件(替换为你的实际文件名) df = pd.read_excel(r'C:\Users\jalal.hasain\Desktop\你的站点表.xlsx') # 2. 定义列名(替换为你Excel中实际的列名,比如'Parent'/'Child') parent_col = '父站点' child_col = '子站点' # 3. 构建父站点到直接子站点的映射字典 parent_to_children = defaultdict(list) for _, row in df.iterrows(): parent = row[parent_col] child = row[child_col] parent_to_children[parent].append(child) # 4. 编写函数统计所有多级子站点数量 def count_all_descendants(parent): count = 0 visited = set() # 防止循环引用导致无限遍历 queue = parent_to_children.get(parent, []) while queue: current_child = queue.pop(0) if current_child in visited: continue visited.add(current_child) count += 1 # 将当前子站点的直接子站点加入队列,继续遍历 queue.extend(parent_to_children.get(current_child, [])) return count # 5. 新增统计列并保存结果 df['多级子站点总数'] = df[parent_col].apply(count_all_descendants) # 查看结果 print(df) # 保存到新Excel文件 df.to_excel(r'C:\Users\jalal.hasain\Desktop\带子站点统计的站点表.xlsx', index=False)
关键说明
- 列名替换:如果你的Excel列名不是
父站点/子站点,必须修改代码中parent_col和child_col的值。 - 循环引用处理:若数据存在A→B→A这类循环关系,
visited集合会跳过已遍历站点,避免死循环。 - 遍历方式切换:如果想改用深度优先搜索(DFS),只需把
queue.pop(0)改成queue.pop(),统计结果完全一致。 - 性能适配:763行数据量极小,无论哪种遍历方式都能快速完成计算。
内容的提问来源于stack exchange,提问作者Jalal Hasain
相关产品推荐
相关产品推荐

