2017-07-26 36 views
1

使用大熊貓或在python其他功能列中的值,提取頂N行的每個值,基於在

我想提取前3行(基於「權重」值)對每個「名稱「:

例如,我有一個這樣的數據。

df = 
row weight name size1 size2 
    1 10 A 4 4 
    2 7 A 2 7 
    3 5 A 9 7 
    4 5 A 2 2 
    5 2 A 6 3 
    1 7 B 3 4 
    2 6 B 8 3 
    3 5 B 4 3 
    4 3 B 4 5 
    5 2 B 2 1 

我想我對我的輸出看起來像這樣:

row weight name size1 size2 
1 10 A 4 4 
2 7 A 2 7 
3 5 A 9 7 
1 7 B 3 4 
2 6 B 8 3 
3 5 B 4 3 

(when 3rd, 4th "weight" value are same) 
row weight name size1 size2 
1 10 A 4 4 
2 7 A 2 7 
3 5 A 9 7 
4 5 A 2 2 
1 7 B 3 4 
2 6 B 8 3 
3 5 B 4 3 

回答

1

試試這個:

In [36]: df.groupby('name', group_keys=False).apply(lambda x: x.nlargest(3, 'weight')) 
Out[36]: 
    row weight name size1 size2 
0 1  10 A  4  4 
1 2  7 A  2  7 
2 3  5 A  9  7 
5 1  7 B  3  4 
6 2  6 B  8  3 
7 3  5 B  4  3 
+0

它的工作原理。謝謝 ! – Hyein