[英]Pandas DataFrame MultiIndex Pivot - Remove Empty Headers and Axis Rows
這與我之前在這里提出的問題密切相關Python Pandas Dataframe Pivot Table Column and Values Order 。 再次感謝您的幫助。 非常感謝。
我正在嘗試自動化一份報告,該報告將通過電子郵件分發給大量受眾,因此它需要看起來“漂亮”:)
我在重置/刪除索引和/或軸后樞軸時遇到問題,無法使用 .style CSS 函數(即從 df 中創建樣式器對象)來使表格看起來不錯。
我有一個 DataFrame,其中兩個主要字段(在我的示例中它們是“Name”和“Bucket”)將是可變的。 所需的顯示順序也會改變(因此不能硬編碼),但它可以在應用程序的早期(例如“Name_Rank”和“Bucket_Rank”)導出為可以輕松排序的整數“排序值”(和理論上后來下降)。
我可以刪除列排序值,但不能刪除行/標題/軸(?)。 此外,無論我嘗試什么,我似乎都無法擺脫標題和數據表之間的空白行。
我(認為)我需要設置 Index = Bucket 和 Headers = "Name" 和 "TDY/Change" 以正確使用 .style 樣式對象功能。
import pandas as pd
import numpy as np
data = [
['AAA',2,'X',3,5,1],
['AAA',2,'Y',1,10,2],
['AAA',2,'Z',2,15,3],
['BBB',3,'X',3,15,3],
['BBB',3,'Y',1,10,2],
['BBB',3,'Z',2,5,1],
['CCC',1,'X',3,10,2],
['CCC',1,'Y',1,15,3],
['CCC',1,'Z',2,5,1],
]
df = pd.DataFrame(data, columns =
['Name','Name_Rank','Bucket','Bucket_Rank','Price','Change'])
display(df)
姓名 | 姓名_排名 | 桶 | Bucket_Rank | 價錢 | 改變 | |
---|---|---|---|---|---|---|
0 | AAA | 2 | X | 3 | 5 | 1 |
1 | AAA | 2 | 是 | 1 | 10 | 2 |
2 | AAA | 2 | Z | 2 | 15 | 3 |
3 | BBB | 3 | X | 3 | 15 | 3 |
4 | BBB | 3 | 是 | 1 | 10 | 2 |
5 | BBB | 3 | Z | 2 | 5 | 1 |
6 | CCC | 1 | X | 3 | 10 | 2 |
7 | CCC | 1 | 是 | 1 | 15 | 3 |
8 | CCC | 1 | Z | 2 | 5 | 1 |
根據先前的問題/答案,我幾乎可以將表格變成正確的格式:
df2 = (pd.pivot_table(df, values=['Price','Change'],index=['Bucket_Rank','Bucket'],
columns=['Name_Rank','Name'], aggfunc=np.mean)
.swaplevel(1,0,axis=1)
.sort_index(level=0,axis=1)
.reindex(['Price','Change'],level=1,axis=1)
.swaplevel(2,1,axis=1)
.rename_axis(columns=[None,None,None])
).reset_index().drop('Bucket_Rank',axis=1).set_index('Bucket').rename_axis(columns=
[None,None,None])
看起來像這樣:
1 | 2 | 3 | ||||
---|---|---|---|---|---|---|
CCC | AAA | BBB | ||||
價錢 | 改變 | 價錢 | 改變 | 價錢 | 改變 | |
桶 | ||||||
是 | 15 | 3 | 10 | 2 | 10 | 2 |
Z | 5 | 1 | 15 | 3 | 5 | 1 |
X | 10 | 2 | 5 | 1 | 15 | 3 |
好吧,那么...
A)我如何擺脫曾經是“Name_Rank”的行/標題/軸(?)(例如整數“排序值”1,2,3)。 我想出了一個技巧,將 df 導出到 XLS/使用 Header=(1,2) 重新導入,但這不是實現目標的最佳方式。
B) 如何去掉表格中數據上方的空白行? 從我在網上閱讀的內容來看,您似乎應該“rename_axis=[None]”,但是無論我嘗試哪種順序,這似乎都不起作用。
C) 有沒有辦法設置標題,使以前的“名稱”和“價格/更改”行都是標題,以便可以使用 .style 功能將它們與中的數據分開格式化下表?
非常感謝任何人可能提出的任何建議。 我完全被困住了!
干杯,德文郡
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.