2017-10-20 10 views
0

Je veux trouver l'animal qui a la couleur brune (colonne 'couleur') et pour ces animaux garder toutes les informations à ce sujet (toutes les lignes), et pour les animaux qui n'ont pas de couleur marron, effacez toutes les informations à ce sujet (toutes les lignes).filtre dataframe sur chaque valeur d'une colonne samn a une valeur spécifique d'une autre colonne dans Panda Python

Un aperçu?

df = pd.DataFrame([['dog','France','white'],['dog','Japon','brown'],['cat','France','white'],['cat','France','dark']],columns=['Animal','localisation','couleur']) 

output = pd.DataFrame([['dog','France','white'],['dog','Japon','brown']],columns=['Animal','localisation','couleur']) 
+0

Pourriez-vous s'il vous plaît préciser ce que vous avez essayé jusqu'à présent? Vous obtiendrez des réponses utiles si vous montrez des efforts plutôt que de vous attendre à ce que les gens résolvent le problème pour vous. – polarise

Répondre

0

Utilisez filter

In [4934]: df.groupby('Animal').filter(lambda x: 'brown' in x['couleur'].values) 
Out[4934]: 
    Animal localisation couleur 
0 dog  France white 
1 dog  Japon brown 

Ou

In [4935]: df.groupby('Animal').filter(lambda x: x['couleur'].eq('brown').any()) 
Out[4935]: 
    Animal localisation couleur 
0 dog  France white 
1 dog  Japon brown 
0

Appliquer une condition df['couleur'] == 'brown] pour obtenir uniquement les enregistrements où le champ de couleur est brun, puis écrasent la trame de données d'origine (à supprimer) :

df = df[df['couleur'] == 'brown'] 

ou si vous voulez juste la sortie:

output = df[df['couleur'] == 'brown'] 
0

Vous pouvez filtrer en fonction de la couleur, puis extraire la liste des animaux qui restent, puis filtrer votre dataframe d'origine pour les animaux dans cette liste, en utilisant le pd. méthode Series.isin:

animals = df[df['couleur'] == 'brown']['Animal'] 
output = df[df['Animal'].isin(animals)] 

ou en une ligne:

output = df[df['Animal'].isin(df[df['couleur'] == 'brown']['Animal'])]