2015-11-17 53 views
2

我有以下數據幀是做一個GROUPBY +骨料和的結果:平鋪/刪除分層列標題

df.groupby(['id', 'category']).agg([pd.Series.sum]) 

        supply   stock    
         sum    sum 
id  category                
4  abc   161   -0.094 
6  sde   -76   0.150 
23  hgv    64   -0.054 
1  wcd   -14   0.073 
76  jhf    -8   -0.057 

由於GROUPBY和AGG的,列標題現在元組。如何將列標題更改爲單個值,即:列標題需要爲supplystock。我只需要得到從

回答

2

如果使用求和「AGG函數名」就不會被列的一部分創建的標題擺脫sum(作爲多指標):

df.groupby(['id', 'category']).sum() 

要刪除它們,你可以刪除級別:

df.columns = df.columns.droplevel(1) 

例如:

In [11]: df 
Out[11]: 
    supply  stock 
     sum  sum 
0 0.501176 0.482497 
1 0.442689 0.008664 
2 0.885112 0.512066 
3 0.724619 0.418720 

In [12]: df.columns.droplevel(1) 
Out[12]: Index(['supply', 'stock'], dtype='object') 

In [13]: df.columns = df.columns.droplevel(1) 

In [14]: df 
Out[14]: 
    supply  stock 
0 0.501176 0.482497 
1 0.442689 0.008664 
2 0.885112 0.512066 
3 0.724619 0.418720 
1

您可以明確地將columns屬性設置爲任何您想要的值。例如:

>>> df = pd.DataFrame(np.random.random((4, 2)), 
...     columns=pd.MultiIndex.from_arrays([['supply', 'stock'], 
                 ['sum', 'sum']])) 
>>> df 
    supply  stock 
     sum  sum 
0 0.170950 0.314759 
1 0.632121 0.147884 
2 0.955682 0.127857 
3 0.776764 0.318614 

>>> df.columns = df.columns.get_level_values(0) 
>>> df 
    supply  stock 
0 0.170950 0.314759 
1 0.632121 0.147884 
2 0.955682 0.127857 
3 0.776764 0.318614