0
votes

Indexation avec la liste des colonnes et plusieurs conditions

essayer d'obtenir des colonnes qui a zéro pour certaines colonnes, mais pas zéro pour les autres. XXX PRE>

Dataframe: P>

import pandas as pd

    df = pd.DataFrame({'t': [0, 0, 11,0], 't2': [0, 0, 0, 0], 'z3': [0, 0, 12, 0], 't4': [0, 0, 2, 0],
                       't5': [0, 0, 0, 0], 'z6': [0, 0, 4, 0], 't7': [1, 1, 0, 1], 't8': [1, 1, 0, 1],
                       'z9': [1, 1, 0, 1], 't10': [1, 1, 0, 1], 't11': [1, 1, 0, 1], 'z12': [1, 1, 0, 1]})
    nozero=['z3','z6','z9','z12']
    zero1=['t','t4','t7','t10']
    zero2=['t2','t5','t8','t11']
    for x,y,z in zip(zero1, zero2, nozero):
        print(df[((df[x]==0) | (df[y]==0)) & (df[z]!=0)])


0 commentaires

3 Réponses :


0
votes

Je pense que c'est à cause de Nan. nan! = 0 est vrai xxx


5 commentaires

Je vérifie juste zéro == 0 et nozero! = 0 permettra à Nan des colonnes nozero. Vous pouvez vérifier et supprimer tout nan s ou drawna tous ensemble


édité la question avec un exemple qui ne fonctionne pas avec votre code


Pouvez-vous mettre en place la sortie attendue pour l'exemple que vous avez monté? Ça va m'aider à visualiser


Je veux la ligne avec index n ° 2 avec t = 11


Bonjour, j'ai édité la question avec le code qui génère la ligne que je veux garder mais non efficace. Y a-t-il un meilleur moyen d'utiliser votre méthode?



0
votes

Basé sur votre discussion avec @coldspeed, il semble que vous travaillez avec un fichier de données qui ressemble plus à xxx

après la conversion des types de données tels que @coldspeed suggéré, vous pouvez aller de l'avant et Utilisez ceci pour sélectionner les données que vous souhaitez. xxx

la première condition (DF [zéro] == 0) .All (1) trouve tout Valeurs dans les colonnes zéro 0 ( tout (1) indique aux pandas de réduire la colonne). La seconde condition trouve toutes les valeurs dans les colonnes nozero qui ne sont pas nulles, telles que @ananay, indiquent nan .

comme @Anno Leur réponse, vous pouvez supprimer des lignes avec des valeurs nan à l'aide de drowna () de sorte que le résultat final est xxx

Je suggérerais également de lire plus sur le . Nan () et .all () méthodes.

edit

Je peux faire xxx

mais je ne sais pas si vous voulez Obtenez ce spécifique. Le problème consiste simplement à trouver les bonnes conditions booléennes pour ma méthode précédente. Nous voulons que la ligne 3 retourne vrai et les autres de retourner faux. Vous pouvez essayer de renommer cette question à "Indexation booléenne pour trouver des valeurs basées sur les conditions de la liste des colonnes" ou de la recherche de celle-ci.


6 commentaires

édité la question avec un exemple qui ne fonctionne pas avec votre code


@RickyKim est ce nouveau Dataframe une réplique exacte du Dataframe que vous travaillez?


Oui j'ai maintenant. C'est le contenu exact du Dataframe (4 premières lignes)


@Rickykim, donc si une colonne de "zéro" a une colonne zéro et toute colonne "nozero" a une valeur qui n'est pas nulle, vous voulez cette ligne?


Oui, je veux la ligne avec t = 11 index = 2. Si tout (t, t2 paire est zéro et z pas zéro) je veux cette ligne


Bonjour, j'ai édité la question avec le code qui génère la ligne que je veux garder mais non efficace. Y a-t-il un meilleur moyen d'utiliser votre méthode?



0
votes

Comme je ne pouvais pas obtenir les rangées désirées avec. Nany ou .Tous, j'ai écrit un code de contournement. Si vous trouvez une manière plus efficace sans boucler dans les colonnes, faites-le moi savoir. Merci pour toute l'aide @ananay MIAL, @ M42OP64, @coldspeed.

    t  t2  z3  t4  t5  z6  t7  t8  z9  t10  t11  z12
2  11   0  12   2   0   4   0   0   0    0    0    0


0 commentaires