在MultiIndexed数据框中为多行显示一个值

时间:2018-05-09 19:00:45

标签: pandas multi-index

我有兴趣在熊猫中展示以下数据:

metric1 | metric 2 || % occurence | total
-----------------------------------------
   A    |    1     ||    20       |  
        |    2     ||    10       |  35
        |    3     ||    5        |
-----------------------------------------
   B    |    1     ||    40       |
        |    2     ||    10       |  65
        |    3     ||    15       |

(对于文本搜索,我将其描述为显示groupby的细分以及MultiIndex外部级别的聚合值)

我可以创建除total列之外的所有列:假设df是一个像

这样的平面表
metric1 | metric 2 | percentage 
--------------------------------
   A    |    1     |    20        
   A    |    2     |    10      
   A    |    3     |    5       
   B    |    1     |    40      
   B    |    2     |    10      
   B    |    3     |    15      

我可以使用

获得我想要的大部分内容
aggregate_df = df.groupby(['metric1', 'metric2']).sum()

我可以使用

获取总值
aggregate_df.sum(level=0)

我的问题是,有没有办法在一个DataFrame中一起显示它们?

1 个答案:

答案 0 :(得分:1)

使用多个索引,您可以制作它并crosstab + stack

pd.crosstab(index=df.metric1,columns=df.metric2,values=df.percentage,aggfunc='sum',margins=True).set_index('All',append=True).iloc[:-1].stack()
Out[59]: 
metric1  All  metric2
A        35   1          20
              2          10
              3           5
B        65   1          40
              2          10
              3          15
dtype: int64