2016-12-23 5 views
4

レベル0のインデックスの各要素の上位結果をグループ化したいとします。このデータフレーム/シリーズの例:マルチインデックスレベル0(シリーズ/ DataFrame)でグループ化すると、結果が列に並び、フィルタリングされます

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) 

enter image description here

IはABグループ化を維持し、それぞれから上位3 val年代(降順)を返すたいです。

答えて

3

はたぶん、これはあなたが

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 
4

ここにもう一つの同様のオプションを探しているものです。

(df.sort_values('val', ascending=False).groupby(level=0).head(3) 
    .sort_index(level = 0, sort_remaining=False, kind="mergesort")) 

enter image description here

3

あなたはソートの時間を無駄にする必要はありません、使用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 
関連する問題