2017-06-13 50 views
4

我給出如何大熊貓透視表中刪除多級索引

df = {'TYPE' : pd.Series(['Advisory','Advisory1','Advisory2','Advisory3']), 
'CNTRY' : pd.Series(['IND','FRN','IND','FRN']), 
'VALUE' : pd.Series([1., 2., 3., 4.])} 
df = pd.DataFrame(df) 
df = pd.pivot_table(df,index=["CNTRY"],columns=["TYPE"]).reset_index() 

樞轉之後,怎樣纔能有數據幀列和DF下面給出像,拆卸多級索引「VALUE」一個數據幀

Type|CNTRY|Advisory|Advisory1|Advisory2|Advisory3 
0  FRN  NaN  2.0  NaN  4.0 
1  IND  1.0  NaN  3.0  NaN 

回答

4

您可以添加參數values

df = pd.pivot_table(df,index="CNTRY",columns="TYPE", values='VALUE').reset_index() 
print (df) 
TYPE CNTRY Advisory Advisory1 Advisory2 Advisory3 
0  FRN  NaN  2.0  NaN  4.0 
1  IND  1.0  NaN  3.0  NaN 

而對於刪除科拉姆NS名稱rename_axis

df = pd.pivot_table(df,index="CNTRY",columns="TYPE", values='VALUE') \ 
     .reset_index().rename_axis(None, axis=1) 
print (df) 
    CNTRY Advisory Advisory1 Advisory2 Advisory3 
0 FRN  NaN  2.0  NaN  4.0 
1 IND  1.0  NaN  3.0  NaN 

但也許是必要的唯一pivot

df = df.pivot(index="CNTRY",columns="TYPE", values='VALUE') \ 
     .reset_index().rename_axis(None, axis=1) 
print (df) 
    CNTRY Advisory Advisory1 Advisory2 Advisory3 
0 FRN  NaN  2.0  NaN  4.0 
1 IND  1.0  NaN  3.0  NaN 

因爲pivot_table總重複默認聚合函數mean

df = {'TYPE' : pd.Series(['Advisory','Advisory1','Advisory2','Advisory1']), 
'CNTRY' : pd.Series(['IND','FRN','IND','FRN']), 
'VALUE' : pd.Series([1., 4., 3., 4.])} 
df = pd.DataFrame(df) 
print (df) 
    CNTRY  TYPE VALUE 
0 IND Advisory 1.0 
1 FRN Advisory1 1.0 <-same FRN and Advisory1 
2 IND Advisory2 3.0 
3 FRN Advisory1 4.0 <-same FRN and Advisory1 

df = df.pivot_table(index="CNTRY",columns="TYPE", values='VALUE') 
     .reset_index().rename_axis(None, axis=1) 
print (df) 
TYPE Advisory Advisory1 Advisory2 
CNTRY         
FRN   0.0  2.5  0.0 
IND   1.0  0.0  3.0 

替代與groupby,聚合函數和unstack

df = df.groupby(["CNTRY","TYPE"])['VALUE'].mean().unstack(fill_value=0) 
     .reset_index().rename_axis(None, axis=1) 
print (df) 
    CNTRY Advisory Advisory1 Advisory2 
0 FRN  0.0  2.5  0.0 
1 IND  1.0  0.0  3.0 
2

您可以使用​​與unstack

df.set_index(['CNTRY', 'TYPE']).VALUE.unstack().reset_index() 

TYPE CNTRY Advisory Advisory1 Advisory2 Advisory3 
0  FRN  NaN  2.0  NaN  4.0 
1  IND  1.0  NaN  3.0  NaN