You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现组织数据向上汇总至最高层级的方法咨询

组织层级向上汇总实现方案

问题说明

现有两张表:

  1. 组织表(org_table):存储公司组织层级关系,层级可能存在空值,但最高(Super Division)和最低层级(Sub Department)永不为空,结构如下:
Super DivisionDivisionSuper DepartmentDepartmentSub Department
123342767546965
345453234na759
  1. 报表表(report_table):报表记录关联任意层级的组织,结构如下:
Report NameOrg LevelOrg ID
ABCDivision342
DEFSuper Department234
GHISuper Division123

需要生成包含原报表记录、并向上汇总至最高层级的结果集,预期输出如下:

Report NameOrg LevelOrg ID
ABCDivision342
ABCSuper Division123
DEFSuper Department234
DEFDivision453
DEFSuper Division345
GHISuper Division123

原编写的函数会返回所有较低层级数据,不符合需求,需调整逻辑。

解决方案实现

核心思路

  1. 明确组织层级从高到低的顺序:Super Division → Division → Super Department → Department → Sub Department
  2. 对每条报表记录,找到其对应在组织表中的行
  3. 从当前关联层级开始,向上遍历所有更高层级,收集有效层级的名称和ID
  4. 将收集到的层级信息与原报表名称组合,生成最终结果

代码实现

import pandas as pd
import numpy as np

# 构造示例组织表
org_data = [
    [123, 342, 767, 546, 965],
    [345, 453, 234, np.nan, 759]
]
org_table = pd.DataFrame(
    org_data,
    columns=['Super Division', 'Division', 'Super Department', 'Department', 'Sub Department']
)

# 构造示例报表表
report_data = [
    ['ABC', 'Division', 342],
    ['DEF', 'Super Department', 234],
    ['GHI', 'Super Division', 123]
]
report_table = pd.DataFrame(
    report_data,
    columns=['Report Name', 'Org Level', 'Org ID']
)

# 定义组织层级从高到低的顺序
hierarchy_order = ['Super Division', 'Division', 'Super Department', 'Department', 'Sub Department']

def get_upper_hierarchy(report_row):
    report_name = report_row['Report Name']
    current_level = report_row['Org Level']
    current_id = report_row['Org ID']
    
    # 获取当前层级在层级顺序中的索引
    current_idx = hierarchy_order.index(current_level)
    # 匹配组织表中对应层级ID的行
    org_row = org_table[org_table[current_level] == current_id].iloc[0]
    
    rollup_data = []
    # 从当前层级向上遍历到最高层级
    for idx in range(current_idx, -1, -1):
        level = hierarchy_order[idx]
        org_id = org_row[level]
        if pd.notna(org_id):
            rollup_data.append({
                'Report Name': report_name,
                'Org Level': level,
                'Org ID': org_id
            })
    return rollup_data

# 生成最终结果
result_list = []
for _, row in report_table.iterrows():
    result_list.extend(get_upper_hierarchy(row))

final_result = pd.DataFrame(result_list)
print(final_result)

代码说明

  • 层级顺序定义:明确从最高到最低的层级关系,确保向上遍历的方向正确
  • 匹配组织行:通过报表中的Org Level和Org ID找到对应的组织记录
  • 向上遍历收集:从当前层级索引开始,反向遍历到最高层级(索引0),只保留非空的层级数据,确保结果只包含当前及上级层级
  • 结果合并:将每条报表记录生成的层级列表合并,转换为DataFrame得到最终输出

内容的提问来源于stack exchange,提问作者Sunny Shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:50:00