2 votes

Supprimer des lignes d'un tableau de données en fonction d'une condition sur plusieurs colonnes différentes

J'ai un DataFrame avec 200 colonnes.
Certaines lignes des colonnes comprises entre 10 et 180 ont des valeurs comprises entre -1 et 0.

Je dois supprimer toutes les lignes contenant ces valeurs, mais uniquement si elles apparaissent dans des colonnes comprises entre 100 et 180. Si ces valeurs apparaissent dans les colonnes 10 à 99, tout va bien et je les conserve.

Je pensais utiliser quelque chose comme :

df[~df[['col100', 'col101',..., 'col180']].isin([-1, 0]).any(1)]

Cependant, je ne peux pas spécifier tous les noms de colonnes à la main. Quelle est la bonne façon d'effectuer cette opération ?

2voto

wwnde Points 14457

Utiliser l'accesseur loc

Si vous avez besoin d'une valeur comprise entre -1 et 0, utilisez ;

df[~df.loc[:,'col100':'col180'].apply(lambda x: x.between(-1,0)).any(1)]

Si vous voulez simplement vérifier s'ils ont -1 et 0, utilisez

df[~df.loc[:,'col100':'col180'].isin([0,-1]).any(1)]

Comment cela fonctionne-t-il ?

df.loc[:,'col100':'col180']- Selects the columns between 100 and 180

df.loc[:,'col100':'col180'].isin([0,-1]).any(1): Tests if there is 0 or -1 in the columns

1voto

piterbarg Points 5113

Pourquoi pas

cols_to_remove = [f'col{n}' for n in range(100,181)]
df[~df[cols_to_remove].isin([-1, 0]).any(1)]

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