3 votes

ne garder que les ids qui ont les trois valeurs de la colonne Mode

J'ai un dataframe pandas avec plusieurs colonnes, qui ressemble à ce qui suit :

Index

ID

Année

Code

Type

Mode

0

100

2018

ABC

1

1

1

100

2019

DEF

2

2

2

100

2019

GHI

3

3

3

102

2018

JKL

4

1

4

103

2019

MNO

5

1

5

103

2018

PQR

6

2

6

102

2019

PQR

3

2

Je veux seulement garder les identifiants qui ont des lignes avec toutes les valeurs de la colonne. Mode . Un exemple serait le suivant :

Index

ID

Année

Code

Type

Mode

0

100

2018

ABC

1

1

1

100

2019

DEF

2

2

2

100

2019

GHI

3

3

J'ai déjà essayé de le faire en utilisant le code suivant :

df = data.groupby('ID').filter(lambda x: {1, 2, 3}.issubset(x['Mode']))

mais cela renvoie un résultat vide. Quelqu'un peut-il m'aider ? TIA

2voto

W-B Points 94428

Vous pouvez essayer

out = df.groupby('ID').filter(lambda x : pd.Series([1,2,3]).isin(x['Mode']).all())
Out[9]: 
   Index   ID  Year Code  Type  Mode
0      0  100  2018  ABC     1     1
1      1  100  2019  DEF     2     2
2      2  100  2019  GHI     3     3

0voto

Manlai A Points 1176

Votre code fonctionne parfaitement (sur pandas 1.3, python 3.9) :

out = df.groupby('ID').filter(lambda x: {1,2,3}.issubset(x['Mode']))

Sortie :

   Index   ID  Year Code  Type  Mode
0      0  100  2018  ABC     1     1
1      1  100  2019  DEF     2     2
2      2  100  2019  GHI     3     3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X