Python Pandas Dataframe sélectionner une ligne par valeur max dans le groupe
J'ai un dataframe qui a été créé par un df.pivot:
type start end
F_Type to_date
A 20150908143000 345 316
B 20150908140300 NaN 480
20150908140600 NaN 120
20150908143000 10743 8803
C 20150908140100 NaN 1715
20150908140200 NaN 1062
20150908141000 NaN 145
20150908141500 418 NaN
20150908141800 NaN 450
20150908142900 1973 1499
20150908143000 19522 16659
D 20150908143000 433 65
E 20150908143000 7290 7375
F 20150908143000 0 0
G 20150908143000 1796 340
Je voudrais filtrer et retourner une seule ligne pour chaque 'F_TYPE' ne revenant à la ligne avec le Maximum de 'to_date'. J'aimerais revenir à la suite de dataframe:
type start end
F_Type to_date
A 20150908143000 345 316
B 20150908143000 10743 8803
C 20150908143000 19522 16659
D 20150908143000 433 65
E 20150908143000 7290 7375
F 20150908143000 0 0
G 20150908143000 1796 340
Merci..
Est
F_Type
une colonne ou votre index? Je pense que df.groupby('F_Type').max()
doit travailler ou df.groupby(df.index).max()
, en fait je pense df.max(level=0)
devrait fonctionnerOriginalL'auteur user636322 | 2015-09-08
Vous devez vous connecter pour publier un commentaire.
Une approche standard consiste à utiliser
groupby(keys)[column].idxmax()
.Cependant, pour sélectionner les lignes à l'aide de
idxmax
vous avez besoinidxmax
pour retourner des valeurs d'index unique. Une façon d'obtenir un index unique est d'appelerreset_index
.Une fois que vous obtenir les valeurs de l'indice de
groupby(keys)[column].idxmax()
vous pouvez ensuite sélectionner l'intégralité de la ligne à l'aide dedf.loc
:Remarque:
idxmax
retourne l'indice de étiquettes, pas nécessairement des ordinaux. Après l'utilisation dereset_index
les étiquettes d'index arriver aussi être ordinaux, mais depuisidxmax
est de retour étiquettes (pas ordinaux), il est préférable de toujours utilisationidxmax
en conjonction avecdf.loc
, pasdf.iloc
(comme je l'a fait à l'origine de ce post.)OriginalL'auteur unutbu