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

如何使用Python/Pandas基于工作分解结构(WBS)为数据框生成父/子标记列

判断WBS编号的父级/子项标记方案

咱们先从你给出的示例里提炼出核心规则:如果一个WBS编号存在直接的下一级子条目(也就是有其他WBS以它为前缀,格式为当前WBS.xxx),那它就是Parent;如果没有任何子条目,就标记为Child。

基于这个规则,我们可以用Pandas快速实现这个逻辑,下面是具体的代码步骤:

1. 构造示例数据

首先把你提供的示例数据转换成DataFrame:

import pandas as pd

data = {
    "WBS #": [
        "1", "1.1", "1.1.1", "1.1.2", "1.1.2.1", "1.1.2.1.1", 
        "1.1.2.1.1.1", "1.1.2.1.1.2", "1.1.2.1.2", "1.1.2.1.3", "1.1.2.2"
    ]
}
df = pd.DataFrame(data)

2. 实现父级判断逻辑

写一个简单的辅助函数检查每个WBS是否存在子项,再用apply方法给每行添加标记:

def has_child(wbs, all_wbs):
    # 构造子项的前缀格式:当前WBS + 英文点号
    child_pattern = f"{wbs}."
    # 检查所有WBS中是否有符合这个前缀的条目
    return any(item.startswith(child_pattern) for item in all_wbs)

# 生成Parent/Child列
df["Parent/Child"] = df["WBS #"].apply(
    lambda x: "Parent" if has_child(x, df["WBS #"].tolist()) else "Child"
)

3. 验证结果

运行代码后打印DataFrame,就能得到和你示例完全一致的结果:

print(df)

输出结果:

WBS # Parent/Child
0           1        Parent
1         1.1        Parent
2       1.1.1         Child
3       1.1.2        Parent
4     1.1.2.1        Parent
5   1.1.2.1.1        Parent
6 1.1.2.1.1.1         Child
7 1.1.2.1.1.2         Child
8   1.1.2.1.2         Child
9   1.1.2.1.3         Child
10      1.1.2.2         Child

优化建议(针对大数据量)

如果你的DataFrame行数很多,上面的循环方法效率可能不够高。可以用集合优化查找速度,减少重复计算:

all_wbs = df["WBS #"].tolist()

df["Parent/Child"] = df["WBS #"].apply(
    lambda x: "Parent" if any(wbs.startswith(f"{x}.") for wbs in all_wbs) else "Child"
)

这样处理后,你就能轻松基于Parent/Child列筛选出所有子级元素进行后续汇总操作啦~

内容的提问来源于stack exchange,提问作者Ryan Kapper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:12:33