3 votes

Grouper par colonne tout en affichant les autres colonnes

J'ai un ensemble de données comme suit :

nom | $ | lettre
adam, 34,  c
beny, 45,  e
adam, 55,  a
beny, 87,  t

Je souhaite extraire le montant maximal $ donné par chaque nom, avec la lettre respective. Ainsi pour Adam, j'obtiendrais : adam,55,a.

Si j'utilise :

df.groupby('name')[['$']].max()

cela ne me donne pas la lettre respective.

Si j'utilise :

df.groupby('name')[['$','letter']].max()

Je reçois le montant $ maximal et la lettre la plus élevée dans l'alphabet.

4voto

jezrael Points 290608

Utilisez DataFrameGroupBy.idxmax pour les index des valeurs max, puis sélectionnez avec loc:

print (df.groupby('name')['$'].idxmax())
name
adam    2
beny    3
Name: $, dtype: int64

df = df.loc[df.groupby('name')['$'].idxmax()]
print (df)
   name   $ letter
2  adam  55      a
3  beny  87      t

Une autre solution avec sort_values d'abord et ensuite utilise GroupBy.last:

df = df.sort_values('$').groupby('name', as_index=False).last()
print (df)
   name   $ letter
0  adam  55      a
1  beny  87      t

La différence entre les solutions est que idxmax garde les index d'origine, tandis que last les réinitialise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X