Pandas 为多索引数据帧中的多行显示一个值

Pandas 为多索引数据帧中的多行显示一个值,pandas,multi-index,Pandas,Multi Index,我有兴趣以熊猫的形式展示以下数据: metric1 | metric 2 || % occurence | total ----------------------------------------- A | 1 || 20 | | 2 || 10 | 35 | 3 || 5 | ----------------------------------

我有兴趣以熊猫的形式展示以下数据:

metric1 | metric 2 || % occurence | total
-----------------------------------------
   A    |    1     ||    20       |  
        |    2     ||    10       |  35
        |    3     ||    5        |
-----------------------------------------
   B    |    1     ||    40       |
        |    2     ||    10       |  65
        |    3     ||    15       |
(对于文本搜索,我将其描述为显示groupby的细分以及多索引外部级别的聚合值)

我可以创建除
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)

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

通过多个索引,您可以创建它和
交叉表
+
堆栈

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

哇,太棒了,谢谢!我唯一的抱怨是ALL列是索引的一部分,而不是常规列。你知道有没有办法让它成为一个常规列?在@a.wan结尾添加
.reset\u index(level='All')
。缺点是每行打印一次;我最终希望能够在每个外层打印一个值,但不能在索引中打印。你知道这是否可能吗?@A.Wan我认为这是不可能的,也许你可以尝试jupyter格式的数据帧,但它只是为了查看