【发布时间】:2021-03-05 22:45:43
【问题描述】:
我正在尝试找出一种好方法,在从 excel 文件中获取的 Pandas 中创建以下数据框的抽象:
Date | ID | Company | ProjectID | ProjectName | ProcessLevel1 | Process1Name | ProcessLevel2 | Process2Name | ProcessLevel3 | Process3Name | ProcessLevel4 | Process4Name | ...
2020 | 1234 | ABCCorp. | XYZ123 | SomeProjectName | P1 | Data Preparation | | | | | | | ...
2020 | 1234 | ABCCorp. | XYZ123 | SomeProjectName | P1 | Data Preparation | P2 | Data Extraction | | | | | ...
2020 | 1234 | ABCCorp. | XYZ123 | SomeProjectName | P1 | Data Preparation | P2 | Data Cleansing | | | | | ...
这些级别是分层的,我想创建一个项目流程的链接,其中不同级别的项目也显示其之前的级别。如上所示,进程的名称和级别有多个级别,L1 是最高级别(第一步)。一些步骤是同时完成的,并且有进程跟随它并分支成具有潜在子进程的多个并行进程。本质上,这是一个树状层次结构,具有P1 级别、P2 级别、P3 级别等,大约有 30 个级别。
基本上,它可能看起来像
P1 Data Preparation
/ \
P2 Data Extraction Data Cleansing
/ | / | \ \
P3 Categorical Numerical Strip Split Null Remove
我正在尝试创建一个数据抽象来绘制它,进行各种计算(即,从特定流程节点产生多少子流程,P3 级别有多少流程,给定某个节点的流程层次结构是什么?在这个进程树等)。我不认为在这里做 Pandas 操作是有用的,我试图使这些数据的预处理非常高效,以便基于 Company 或 ProjectID 进行分组操作,以显示层次结构并突出不同的方面。此外,如果使用一棵树,它不一定是平衡的,因为一些层次结构可能深入到一个叶子节点,而另一些层次结构的子节点数量较多,但在层次结构层次中停止。
我尝试了pd.melt() 操作以将它们融合在一起,但这并不是最好的方法,因为每个进程级别有两列(即ProcessLevelXX 和ProcessXXName)是在单独的列中,我想将它们放在一起以用于层次结构。是否有a)Pandas中的一种有效算法,用于处理分布在多列中的这些类型的分层数据,并且通过智能Pandas操作我可以映射这些关系,或者b)我可以用来有效计算和执行的数据结构或算法groupby 的?这是一个值得关注的领域,因为通过数据抽象,树数据结构的有效重新排列(这是我正在考虑的,因为数据本质上是分层的)将非常低效。但是,我不知道如何构建一个高效、优雅的范例来做到这一点。如果这些数据在数据库中可用,那将是理想的,但这里不是这种情况(只是在 Excel 中以这种格式给出)。
【问题讨论】:
标签: python pandas algorithm dataframe data-structures