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