2015-12-03 6 views
1

J'ai une image ressemblant à la suivante (je l'ai déjà triée en fonction de la colonne item). Par exemple, l'article 1-10,11-20, ... (tous les 10 articles) sont dans la même catégorie, je veux trouver l'article dans chaque catégorie qui a le score le plus élevé et le retourner.Trouver la valeur maximale dans une trame de données python combinant plusieurs lignes

Quelle est la manière la plus efficace de faire cela?

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 

Répondre

2

en supposant que votre dataframe est stocké dans df

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

)

obtenir les valeurs max de chaque catégorie

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

cela vous donne les IDs des lignes qui contiennent le score maximum dans chaque catégorie

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

alors obtenir les éléments associés à ces ids

df.loc[max_score_ids].item 

1  1 
10 15 
59 25 
24 38 
27 42