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.)