3
votes

trouver des groupes qui remplissent une condition dans le groupe pandas

Voici mon dataframe:

x
   a   b
0  x  10
1  x  20
2  x  30

Je les regroupe:

groups = df.groupby('a')

Je veux imprimer les groupes qui ont au moins un b ci-dessus 20. Dans ce cas, je souhaite imprimer x . Voici le résultat souhaité:

df = pd.DataFrame({'a':list('xxxyyzz'), 'b':[10,20,30,5,3,1,2]})


0 commentaires

3 Réponses :


5
votes

Comparez les valeurs par Series. gt , regroupant par une colonne comme Series - df ['a'] et utilisez GroupBy.transform avec GroupBy.any pour tester au moins un True par groupes:

df1 = df[df['b'].gt(20).groupby(df['a']).transform('any')]
print (df1)
   a   b
0  x  10
1  x  20
2  x  30


1 commentaires

Quand je vous ai vu poster, je sais que j'ai besoin de trouver un autre moyen d'y parvenir :-)



4
votes

Vous pouvez vérifier quelles valeurs sont supérieures à 20 , colonne GroupBy a et transformer avec any pour sélectionner seuls les groupes dont au moins une ligne remplit la condition:

df[df.b.gt(20).groupby(df.a).transform('any')]

   a   b
0  x  10
1  x  20
2  x  30


0 commentaires

4
votes

Pas besoin de groupby , il suffit de faire isin

df[df.a.isin(df.loc[df.b>20,'a'])]
Out[996]: 
   a   b
0  x  10
1  x  20
2  x  30


1 commentaires

J'aime cette réponse mais la syntaxe me donne un léger mal de tête ...