méthode pandas pour obtenir la ligne avec la valeur maximale dans le groupe groupby

不言
Libérer: 2023-03-24 14:34:02
original
4096 Les gens l'ont consulté

Ce qui suit est une méthode pandas pour obtenir la ligne avec la valeur maximale dans un groupe groupby. Elle a une bonne valeur de référence et j'espère qu'elle sera utile à tout le monde. Jetons un coup d'œil ensemble

Méthode Pandas pour obtenir la ligne avec la valeur maximale dans le groupe groupby

Par exemple, le DataFrame suivant est regroupés selon Mt et retirés La rangée avec le plus grand nombre

import pandas as pd
df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})

df
Copier après la connexion


< td>2< /tr>< /tbody>

CountMtSpValue
03s1a1
12s1b2
25s2c3
310s2d4
410s2e5
56s3f6
CompteMtSpValeur
03s1a1
12s1b
25s2c3
310s2d4
410s2e5
56s3f6

Méthode 1 : filtrer les lignes avec le plus grand nombre du groupe

df.groupby(&#39;Mt&#39;).apply(lambda t: t[t.Count==t.Count.max()])
Copier après la connexion


< td>10< td>s3


CountMtSpValue
Mt




s103s1a1
s2310s2d4
410s2e5
s356s3f6

CompteMtSpValeur
Mt

s103s1 a1
s23 s2d4
410 s2e5
s356f6

print df.groupby([&#39;Mt&#39;])[&#39;Count&#39;].agg(max)

idx=df.groupby([&#39;Mt&#39;])[&#39;Count&#39;].transform(max)
print idx
idx1 = idx == df[&#39;Count&#39;]
print idx1

df[idx1]
Copier après la connexion
Méthode 2 : utilisez la transformation pour obtenir l'index de la trame de données d'origine, puis filtrez les lignes requises

Mt
s1 3
s2 10
s3 6
Name: Count, dtype: int64
0 3
1 3
2 10
3 10
4 10
5 6
dtype: int64
0 True
1 False
2 False
3 True
4 True
5 True
dtype: bool
Copier après la connexion



CountMtSpValue
03s1a1
310s2d4
410s2e5
56s3f6

< td>s2
CompteMtSpValeur
0 3s1a1
310s2d4
410e5
56s3 f6
A Le problème avec les méthodes ci-dessus est que les valeurs des lignes 3 et 4 sont toutes la valeur maximale, donc plusieurs lignes sont renvoyées. Et si une seule ligne est renvoyée ?

idx = df.groupby(&#39;Mt&#39;)[&#39;Count&#39;].idxmax()
print idx
Copier après la connexion
Méthode 3 : idmax (l'ancienne version de pandas est argmax)

df.iloc[idx]
Mt
s1 0
s2 3
s3 5
Name: Count, dtype: int64
Copier après la connexion



CountMtSpValue
03s1a1
310s2d4
56s3f6

df.iloc[df.groupby([&#39;Mt&#39;]).apply(lambda x: x[&#39;Count&#39;].idxmax())]
Copier après la connexion

CompteMtSpValeur
03s1a1
310s2d4
56s3f6


CountMtSpValue
03s1a1
310s2d4
56s3f6

def using_apply(df):
 return (df.groupby(&#39;Mt&#39;).apply(lambda subf: subf[&#39;Value&#39;][subf[&#39;Count&#39;].idxmax()]))

def using_idxmax_loc(df):
 idx = df.groupby(&#39;Mt&#39;)[&#39;Count&#39;].idxmax()
 return df.loc[idx, [&#39;Mt&#39;, &#39;Value&#39;]]

print using_apply(df)

using_idxmax_loc(df)
Copier après la connexion

CompteMtSpValeur
03s1a1
310s2d4
56s3f6

Mt
s1 1
s2 4
s3 6
dtype: int64
Copier après la connexion



MtValue
0s11
3s24
5s36

< thead>< tr> < td> 4

MtValeur
0s11
3s2
5s36

df.sort(&#39;Count&#39;, ascending=False).groupby(&#39;Mt&#39;, as_index=False).first()
Copier après la connexion
Méthode 4 : Triez-le d'abord, puis prenez le premier de chaque groupe



Mt Count Sp Value
0 s1 3 a 1
1 s2 10 d 4
2 s3 6 f 6

Nombre

MontSp Valeur
0 s1 3 a 1
1 s2 10 d 4
2 s3 6 f 6
Ensuite, le problème revient si vous ne souhaitez pas supprimer. la ligne avec la valeur maximale. Par exemple, qu'en est-il de la ligne où se trouve la valeur médiane ?

L'idée est toujours similaire, mais certaines modifications peuvent être nécessaires dans la méthode d'écriture spécifique. Par exemple, les méthodes 1 et 2 doivent modifier l'algorithme max et la méthode 3 doit implémenter une méthode pour renvoyer l'index. Quoi qu'il en soit, après groupby, chaque groupe est une trame de données.

Recommandations associées :

pandas+dataframe implémente des opérations de sélection et de découpage de lignes et de colonnes

Démarrez avec le traitement des données Python pandas de la bibliothèque

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal