Tout le monde, j'ai une trame de données comme:

groups  name
1   A
1   B
1   C
1   D
2   E
3   F
3   G
4   H
5   I

Et à partir de cela, je voudrais conserver uniquement dans le bloc de données les valeurs qui sont seules dans un groupe:

groups  name
2   E
4   H
5   I

E, H et moi sommes seuls dans leurs groupes respectifs.

J'ai essayé:

df[df.groupby(['groups']).count() == 1 ]

Mais cela ne semble pas être la solution.

0
chippycentra 15 mars 2019 à 15:38

2 réponses

Meilleure réponse

Utilisez GroupBy.transform pour les séries avec la même taille que l'original DataFrame :

df[df.groupby(['groups'])['name'].transform('size') == 1 ]
1
jezrael 15 mars 2019 à 12:47

Utilisez duplicated:

df[~df.groups.duplicated(keep=False)]

   groups name
4       2    E
7       4    H
8       5    I

Ou, drop_duplicates.

df.drop_duplicates('groups', keep=False)

   groups name
4       2    E
7       4    H
8       5    I
2
cs95 15 mars 2019 à 12:39