[英]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 操作在這里有用,我試圖使這些數據的預處理高效,以便基於Company
或ProjectID
進行分組操作,以顯示層次結構並突出顯示不同方面。 此外,如果使用一棵樹,它不一定是平衡的,因為某些層次結構可能 go 深入到一個葉節點,而另一些具有更大數量的子節點但在層次結構級別中停止。
我嘗試了pd.melt()
操作以將它們融合在一起,但這並不是最好的方法,因為每個進程級別的兩列(即ProcessLevelXX
和ProcessXXName
)位於單獨的列中,其中我想為了等級的目的而保持在一起。 是否有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.