【发布时间】:2021-12-07 12:48:56
【问题描述】:
早上好! 我对 pandas/python 很陌生。我目前的 ETL 主要使用 SQL 和 SSIS,但对于新的数据源,它需要在 Excel 中进行繁琐的手动重新格式化。我正在尝试学习 python 以节省数小时的手动工作。报告中的数据极其冗余。我花了好几天的时间试图用一种能返回我需要的信息的方式来表达我需要的东西,但无济于事。
我不能使用我的实际数据,因为它包含 PHI,所以我将给出一个使用客户和订单的类似示例。外部系统生成“MonthlyOrders.xls”报告。导出格式几乎有零灵活性。 .xls 文件扩展名让您了解源环境的过时程度。首先,我将数据加载到数据框中,并按“组”将其拆分为较小的数据框。所以每个df代表一个组。之后的样子是这样的:
一般格式:
| index | Name/Date | ID/Item | Price/ 'P' | Billed/'NaaN' | PaidOn/Seller | Total/Dept |
|---|---|---|---|---|---|---|
| 1 | ClientName | Client ID | 'P' | Date Billed | Pmt_received_On | Order Total |
| 2 | Order Date | item name | item price | 'NaaN' | sold by | dept |
| 3 | Same order date | 2nd item | price | 'Naan' | sold by | dept |
| 4 | NextClientName | NextID | 'P' | Date Billed | Pmt_received_On | Order Total |
数据示例:
| Index | Name/Date | ID/Item | Price/ 'P' | Billed/'NaaN' | PaidOn/Seller | Total/Dept |
|---|---|---|---|---|---|---|
| 1 | Victim, One | VO100 | 'P' | 08/12/2021 | 08/13/2021 | 78 |
| 2 | 08/11/2021 | books | 12 | 'NaaN' | Mrs. White | The Study |
| 3 | 08/11/2021 | Rope | 56 | 'Naan' | Mrs. White | The Study |
| 4 | 08/11/2021 | Pens | 10 | 'NaaN' | Mrs. White | The Study |
| 5 | Second, Dead | SD123 | 'P' | 08/18/2021 | 08/20/2021 | 250 |
| 6 | 08/17/2021 | Pool Cue | 198 | 'NaaN' | Mr. Green | Billiard Room |
| 7 | 08/17/2021 | Knife | 52 | 'Naan' | Mr. Green | Billiard Room |
我想做的是使用客户名称和客户 ID、OrderDate 创建一个多级索引。 也许我可以将 Name:ID 作为字典并将其用作第一级索引,然后日期将成为下一个级别。我不确定我是否可以这样做。
或者,我想将第一列和第二列分成四列(名称、ID、orderDate、Item)。我不使用“订单总计”列。数据进入 Billing_Import 临时表,然后在数据仓库中进一步操作和转换。目标表的结构如下:
| RecID | Group | ClientName | OrderDate | ClientID | ItemID | desc | ChgAmt | pmtAmt | seller | dept |
|---|
在 SSIS 中添加了“RecID”,并在使用 SQL 导入后从“Desc”列中拆分出“Item ID”。我计划在每个数据框中添加一个“组”列,这样我就知道哪些数据属于哪个组。目前,这些组位于单独的数据框中。
订单的“部门”始终相同。几乎总是只有一个“卖家”,但如果一个订单上有 2 个卖家,则会添加另一条记录。
我想要的格式是这样的:
| Group | ID | Name | OrderDate | ItemDesc | Charge | Pmt | Seller | Department |
|---|---|---|---|---|---|---|---|---|
| Group1 | ||||||||
| ID1a | Name1a | 1/1/2021 | item1 | $x | $y | Ms. Scarlet | The Lounge | |
| item2 | $x | $y | Ms. Scarlet | |||||
| item3 | $x | $y | Ms. Scarlet | |||||
| ID2a | Name2b | 1/15/2021 | item1 | $x | $y | Mrs. Peacock | The Kitchen | |
| item2 | $x | $y | Mrs. Peacock | |||||
| Group2 | ||||||||
| ID2a | Name2a | 1/22/2021 | item1 | $x | $y | Wadsworth | The Cellar | |
| item2 | $x | $y | Wadsworth | |||||
| ID2a | Name2a | 1/22/2021 | item1 | $x | $y | Col. Mustard | The Cellar |
非常感谢任何和所有建议!
最诚挚的问候,
科里
【问题讨论】:
标签: pandas multi-index