2015-12-03 2 views
1

У меня есть dataframe выглядит следующим образом (я уже отсортировал его по столбцу 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

предполагается, что ваш dataframe хранится в ДФ

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

)

получить максимальные значения из каждой категории

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

это дает вам идентификаторы строк, которые содержат максимальный балл в каждой категории

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

затем получить элементы, связанные с этими идентификаторами

df.loc[max_score_ids].item 

1  1 
10 15 
59 25 
24 38 
27 42 
Смежные вопросы