Python 按多索引级别0(系列/数据帧)对列进行排序并筛选顶级结果
我想将索引中每个元素的顶级结果分组到0级。例如,对于此数据帧/系列:Python 按多索引级别0(系列/数据帧)对列进行排序并筛选顶级结果,python,pandas,Python,Pandas,我想将索引中每个元素的顶级结果分组到0级。例如,对于此数据帧/系列: import pandas as pd import numpy as np np.random.seed(1) index = list(zip(['A']*5 + ['B']*5, list(range(10)))) df = pd.Series(np.random.random((10)), index=pd.MultiIndex.from_tuples(index, names=['i0
import pandas as pd
import numpy as np
np.random.seed(1)
index = list(zip(['A']*5 + ['B']*5, list(range(10))))
df = pd.Series(np.random.random((10)),
index=pd.MultiIndex.from_tuples(index, names=['i0', 'i1']),
name='val')
pd.DataFrame(df)
我想对
A
和B
进行分组,并从每个组返回前3个val
(降序)。也许这就是您要找的
df.groupby(level=0, group_keys=False).apply(lambda x: x.sort_values(ascending=False).head(3))
i0 i1
A 1 0.720324
0 0.417022
3 0.302333
B 9 0.538817
8 0.396767
7 0.345561
这里还有一个类似的选项:
(df.sort_values('val', ascending=False).groupby(level=0).head(3)
.sort_index(level = 0, sort_remaining=False, kind="mergesort"))
您不需要浪费时间进行排序,请使用
nlargest
df.groupby(level=0, group_keys=False).nlargest(3)
i0 i1
A 1 0.720324
0 0.417022
3 0.302333
B 9 0.538817
8 0.396767
7 0.345561
Name: val, dtype: float64