仅在具有多索引的系列的一个级别上使用agg方法

时间:2019-08-20 10:12:54

标签: python python-3.x pandas

让我们从具有多索引的系列开始

import pandas as pd

s = pd.Series(range(10), 
              index=[
                     [i//2 for i in range(10)],
                     [i%5 for i in range(10)]
])

s.index

>>> MultiIndex(levels=[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]],
               codes=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4], [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]])

如果我想要索引级别0的最小值,我可以简单地写

s.min(level=0)
>>> 0    0
1    2
2    4
3    6
4    8
dtype: int64

maxmin std等相同

如果我将agg与单个功能一起使用,即使我使用s.agg('min', level=0)等效于上一个命令,我甚至会得到相同的结果

但是,如果我传递一个函数列表,它将不起作用

s.agg(['min', 'max'], level=0)
>>>min    0
max    9
dtype: int64

是否有一种方法可以指定级别,使其具有仅在第一个索引之后才聚合minmax的输出?

1 个答案:

答案 0 :(得分:2)

可以在groupby中使用扩展格式:

print (s.groupby(level=0).agg(['min', 'max']))
   min  max
0    0    1
1    2    3
2    4    5
3    6    7
4    8    9