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格式的数据帧,但它只是为了查看