簡體   English   中英

使用柱狀 Pandas dataframe 數據格式生成分層樹結構

[英]Work with a columnar Pandas dataframe data format to generate a hierarchical tree structure

我試圖找出一個好方法來在從 excel 文件獲得的 Pandas 中創建以下 dataframe 的抽象:

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 是最高級別(第一步)。 一些步驟是同時完成的,並且有進程跟隨它並分支成具有潛在子進程的多個並行進程。 本質上,這是一個樹狀層次結構,具有大約 30 個級別的P1級別、 P2級別、 P3級別等。

本質上,它看起來像

P1                          Data Preparation
                           /                 \
P2                  Data Extraction        Data Cleansing
                   /         |            /     |   \     \
P3            Categorical Numerical     Strip Split Null  Remove

我正在嘗試為 plot 創建一個數據抽象,進行各種計算(即,從特定進程節點產生多少子進程,P3 級別有多少進程,在此進程中給定某個節點的進程層次結構是什么樹等)。 我不認為 Pandas 操作在這里有用,我試圖使這些數據的預處理高效,以便基於CompanyProjectID進行分組操作,以顯示層次結構並突出顯示不同方面。 此外,如果使用一棵樹,它不一定是平衡的,因為某些層次結構可能 go 深入到一個葉節點,而另一些具有更大數量的子節點但在層次結構級別中停止。

我嘗試了pd.melt()操作以將它們融合在一起,但這並不是最好的方法,因為每個進程級別的兩列(即ProcessLevelXXProcessXXName )位於單獨的列中,其中我想為了等級的目的而保持在一起。 是否有a)Pandas中的一種有效算法,用於處理分布在多列中的這些類型的分層數據以及智能Pandas操作我可以map使用這些關系,或者b)可以有效地計算和執行數據結構或算法groupby的? 這是一個值得關注的領域,因為通過數據抽象,樹數據結構的有效重新排列(這是我正在考慮的,因為數據本質上是分層的)將非常低效。 但是,我不知道如何構建一個高效、優雅的范例來做到這一點。 如果此數據在數據庫中可用,那將是理想的,但這里不是這種情況(只是在 Excel 中以這種格式給出)。

Pandas 中的分層索引使用他們所謂的 MultiIndex。

這個想法是,您的索引不是單個系列,而是像它自己的 DataFrame 一樣具有多個系列。 對於您的示例數據,MultiIndex 的第一級將命名為 P1,其值為所有行的“數據准備”。 第二個級別是 P2,有兩個值,“數據提取”和“數據清理”。 等等。

任何單獨的行都會對 MultiIndex 的每個級別都有一個值,例如,您可能有一個索引值為 ["Data Preparation", "Data Cleansing", "Split"] 的行。

文檔: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM