查询BOM是一个Dataframe

查找指定Series[A,B]返回结果是一个Dataframe如下图

前行与后行有父子关系的要放在一起,如上图第一行找到的是第二行,第二行找到的是第三行直至没有下层BOM,层级分别是1、2、3,q然后第四行是是找到第二层的第二个物料,如此循环
因为BOM清单有数十万行,所以需要考虑代码的运行速度。
查询BOM是一个Dataframe


以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
要解决这个问题,我们可以使用Python中的Pandas库来处理和分析BOM清单数据。以下是一个可能的解决方案,包括代码示例和一些性能优化的考虑。
假设我们已经有了一个DataFrame bom_df,其中包含了BOM清单的数据。
import pandas as pd
# 假设bom_df是已经加载好的BOM数据
# bom_df.columns = ['父物料', '子物料', '层级']
def query_bom(bom_df, series):
# 创建一个空的DataFrame来存储结果
result_df = pd.DataFrame(columns=['父物料', '子物料', '层级'])
# 对于指定的系列,查询其所有子物料
for item in series:
# 查询顶层物料
top_materials = bom_df[bom_df['子物料'] == item]
# 递归查询所有子物料
def recursive_query(material, level):
children = bom_df[bom_df['父物料'] == material]
if not children.empty:
# 将当前物料及其子物料添加到结果中
result_df = result_df.append({
'父物料': material,
'子物料': children['子物料'].iloc[0],
'层级': level
}, ignore_index=True)
# 递归查询子物料的子物料
recursive_query(children['子物料'].iloc[0], level + 1)
# 从顶层物料开始递归查询
for _, top in top_materials.iterrows():
recursive_query(top['子物料'], 1)
return result_df
# 查询指定系列[A, B]
series_to_query = ['A', 'B']
result = query_bom(bom_df, series_to_query)
print(result)
category类型。请注意,这个解决方案是一个起点,可能需要根据实际数据结构和需求进行调整。如果BOM数据非常庞大,可能需要考虑使用更高级的数据处理框架或数据库系统来处理数据。