2017-10-04 1 views
0

I ont cette df dataframe:filtrer les lignes de trame de données selon la valeur de la colonne max

 artist    track class1 class2  class3 
0 Portishead    Roads 0.98 0.02   0.0 
1 Yo La Tengo  Our Way to Fall 0.14 0.86   0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97   0.0 

Compte tenu de ces entrées d'utilisateur:

input_value = 0.8 
input_class = 'class2' 

J'utilise le code suivant dans réordonner la trame de données selon la classe2 valeur maximale:

for col in df.ix[:,'class1':'class3']: 
    if col == input_class: 
     reordered_df = df.iloc[(df[input_class] - input_value).argsort()] 

comme ceci:

1 Yo La Tengo  Our Way to Fall 0.14 0.86   0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97   0.0 
0 Portishead    Roads 0.98 0.02   0.0 

cependant, je dois encore répondre à une condition de classe, qui est la valeur class2 doit être la plus élevée float valeur dans chaque rangée . en d'autres termes:

0 Portishead    Roads 0.98 0.02   0.0 

doit être désactivé, car la valeur max appartient à une autre classe.

Comment puis-je insérer cette condition sur l'extrait ci-dessus?

+0

Votre df et reorded_df n'ont pas les mêmes valeurs. S'il vous plaît regarder à nouveau. –

Répondre

1

Repérez le code max le long des colonnes, comparez à class2 et mettez-les au rebut en conséquence.

reordered_df 
     artist    track class1 class2 class3 
1 Yo La Tengo  Our Way to Fall 0.14 0.86  0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97  0.0 
0 Portishead    Roads 0.98 0.02  0.0 

reordered_df[reordered_df.max(1) == reordered_df.class2] 
     artist    track class1 class2 class3 
1 Yo La Tengo  Our Way to Fall 0.14 0.86  0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97  0.0 
+0

pourriez-vous s'il vous plaît modifier votre solution en utilisant l'extrait ci-dessus? J'ai besoin de garder les deux dataframes: 'df'et' reordered_df' – outkast

+0

@outkast Vous n'avez pas besoin de la boucle for. Aussi, voir modifier. –