Python Pandas Dataframe sélectionner une ligne par valeur max dans le groupe
j'ai une base de données qui a été créée via 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' retournant seulement la ligne avec le Maximum '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..
1 réponses
une approche standard est d'utiliser groupby(keys)[column].idxmax()
.
Cependant, pour sélectionner les lignes souhaitées en utilisant idxmax
vous avez besoin d' idxmax
pour retourner les valeurs indicielles uniques. Une façon d'obtenir un index unique est d'appeler reset_index
.
une fois que vous obtenez les valeurs de l'indice de groupby(keys)[column].idxmax()
Vous pouvez ensuite sélectionner la ligne entière en utilisant df.loc
:
In [20]: df.loc[df.reset_index().groupby(['F_Type'])['to_date'].idxmax()]
Out[20]:
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
Remarque: idxmax
index des retoursétiquettes, pas nécessairement des ordinaux. Après l'utilisation de reset_index
les étiquettes d'index arriver aussi être ordinaires, mais depuis idxmax
renvoie les étiquettes (pas les normales) il est préférable de toujours utiliser idxmax
en conjonction avec df.loc
, pas df.iloc
(comme je l'ai fait à l'origine dans ce post.)