让我们从具有多索引的系列开始
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
与max
,min
std
等相同
如果我将agg
与单个功能一起使用,即使我使用s.agg('min', level=0)
等效于上一个命令,我甚至会得到相同的结果
但是,如果我传递一个函数列表,它将不起作用
s.agg(['min', 'max'], level=0)
>>>min 0
max 9
dtype: int64
是否有一种方法可以指定级别,使其具有仅在第一个索引之后才聚合min
和max
的输出?
答案 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