You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

遍历Excel数据集从树形结构中查找无父项的顶层节点

找出数据集中的最高层级节点(无父项的项)

嘿,我来帮你搞定这个问题!首先咱们先把你的数据集整理成清晰的Markdown表格,方便直观查看:

ItemMaterial
2094-00003MHY00007
2105-00012105-0002
2105-00022105-1000
2105-10002105-1003
2105-10037547-122
7932-000017932-00015
7932-000027932-00015
7932-00010MHY00007
7932-000157932-05000
7932-05000MHY00007

核心思路

最高层级的节点(无父项的项)的本质是:这个Item从未出现在Material列中。因为如果一个Item是某个其他项的子材料(即出现在Material列),那它必然有父项;反过来,只有当Item不在任何Material值里时,说明没有任何其他项把它当作子节点,它就是顶层节点。

具体实现方法

下面给你两种常用的实现方式,按需选择:

方法1:使用Pandas(适合处理大型数据集)

如果你的数据量比较大,用Pandas会更高效:

import pandas as pd

# 构造你的数据集
data = {
    'Item': ['2094-00003', '2105-0001', '2105-0002', '2105-1000', '2105-1003', '7932-00001', '7932-00002', '7932-00010', '7932-00015', '7932-05000'],
    'Material': ['MHY00007', '2105-0002', '2105-1000', '2105-1003', '7547-122', '7932-00015', '7932-00015', 'MHY00007', '7932-05000', 'MHY00007']
}
df = pd.DataFrame(data)

# 把所有Material值存入集合(集合的查找速度远快于列表)
materials_set = set(df['Material'])

# 筛选出不在materials_set中的Item
top_level_items = df[~df['Item'].isin(materials_set)]['Item'].tolist()

print("最高层级的项:", top_level_items)

运行后输出的结果是:['2094-00003', '2105-0001', '7932-00001', '7932-00002', '7932-00010']

方法2:基础Python实现(无需额外库)

如果不想依赖第三方库,用原生Python就能搞定:

# 原始数据列表,每个元素是(Item, Material)元组
items_data = [
    ('2094-00003', 'MHY00007'),
    ('2105-0001', '2105-0002'),
    ('2105-0002', '2105-1000'),
    ('2105-1000', '2105-1003'),
    ('2105-1003', '7547-122'),
    ('7932-00001', '7932-00015'),
    ('7932-00002', '7932-00015'),
    ('7932-00010', 'MHY00007'),
    ('7932-00015', '7932-05000'),
    ('7932-05000', 'MHY00007')
]

# 提取所有Material值到集合
materials = {material for item, material in items_data}

# 遍历筛选出顶层项
top_level = [item for item, material in items_data if item not in materials]

print("最高层级的项:", top_level)

运行结果和上面完全一致。

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

火山引擎 最新活动