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]})
3 Réponses :
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
Quand je vous ai vu poster, je sais que j'ai besoin de trouver un autre moyen d'y parvenir :-)
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
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
J'aime cette réponse mais la syntaxe me donne un léger mal de tête ...