2015-12-03 99 views
1

我有一个如下所示的数据框(我已经根据item列对它进行了排序)。例如,项目1-10,11-20,...(每10项)都属于同一类别,我想找到每个类别中得分最高的项目并将其返回。在python数据框中结合多行查找最大值

什么是最有效的方法呢?

item score 
1 1 10 
3 4 1 
4 6 6 
39 11 2 
8 12 1 
9 13 1 
10 15 24 
11 17 9 
12 18 12 
13 20 7 
14 22 1 
59 25 3 
18 28 3 
19 29 2 
22 34 2 
23 37 1 
24 38 3 
25 39 2 
26 40 2 
27 42 3 
29 45 1 
31 48 1 
32 53 4 
33 58 4 

回答

2

假设你的数据帧存储在DF

g = df.groupby(pd.cut(df.item, np.arange(1, df.item.max(), 10), right=False) 

从每个类别

max_score_ids = g.score.agg('idxmax') 

此为您提供了包含行的ID获得的最高值每个类别中的最高分数

item 
[1, 11)  1 
[11, 21) 10 
[21, 31) 59 
[31, 41) 24 
[41, 51) 27 

然后得到这些ID相关联的项目

df.loc[max_score_ids].item 

1  1 
10 15 
59 25 
24 38 
27 42