2015-07-11 122 views
3

我遇到了由Pandas創建的數據透視表的格式問題。 因此,我通過使用pandas.pivot_table將A作爲列,將B作爲索引,在源數據中創建了2列(A,B)之間的矩陣表。格式熊貓樞軸表

>> df = PD.read_excel("data.xls") 
>> table = PD.pivot_table(df,index=["B"], 
    values='Count',columns=["A"],aggfunc=[NUM.sum], 
    fill_value=0,margins=True,dropna= True) 
>> table 

它返回爲:

 sum 
    A  1 2 3 All 
    B 
    1  23 52 0 75 
    2  16 35 12 65 
    3  56 0 0 56 
All  95 87 12 196 

,我希望能有這樣的格式:

   A  All_B 
      1 2 3 
    1  23 52 0  75 
B 2  16 35 12  65 
    3  56 0 0  56 
All_A  95 87 12 196 

我應該怎麼辦呢?非常感謝。

回答

1

pd.pivot_table返回的表格非常方便地進行工作(它是單級索引/列),通常不需要進一步的格式操作。但是,如果您堅持將格式更改爲您在帖子中提到的格式,那麼您需要使用pd.MultiIndex構建多級索引/列。這裏是一個如何做到這一點的例子。

操作之前,

import pandas as pd 
import numpy as np 

np.random.seed(0) 
a = np.random.randint(1, 4, 100) 
b = np.random.randint(1, 4, 100) 
df = pd.DataFrame(dict(A=a,B=b,Val=np.random.randint(1,100,100))) 
table = pd.pivot_table(df, index='A', columns='B', values='Val', aggfunc=sum, fill_value=0, margins=True) 
print(table) 


B  1  2  3 All 
A       
1  454 649 770 1873 
2  628 576 467 1671 
3  376 247 481 1104 
All 1458 1472 1718 4648  

後:

multi_level_column = pd.MultiIndex.from_arrays([['A', 'A', 'A', 'All_B'], [1,2,3,'']]) 
multi_level_index = pd.MultiIndex.from_arrays([['B', 'B', 'B', 'All_A'], [1,2,3,'']]) 
table.index = multi_level_index 
table.columns = multi_level_column 
print(table) 

      A    All_B 
      1  2  3  
B  1 454 649 770 1873 
     2 628 576 467 1671 
     3 376 247 481 1104 
All_A 1458 1472 1718 4648  
+0

謝謝。這很有幫助。 – AlanniY