0
votes

Comparez trois colonnes et choisissez le plus haut

J'ai un jeu de données qui ressemble à l'image ci-dessous,

 échantillons de données p>

et mon objectif est de comparer les trois dernières lignes et choisissez le plus haut chaque fois. p>

J'ai quatre nouvelles variables: vide = 0, annuler = 0, version = 0, sous-titré = 0 p>

pour index 0, l'annulation est le plus élevé, donc annuler + = 1 . Le indéterminé n'est augmenté que si les trois rangées sont identiques. P>

Voici mon échantillon de code défaillant: P>

    empty = 0 
    cancel = 0
    release = 0
    undetermined = 0
    if (df["emptyCount"] > df["cancelcount"]) & (df["emptyCount"] > df["releaseCount"]):
       empty += 1
   elif (df["cancelcount"] > df["emptyCount"]) & (df["cancelcount"] > df["releaseCount"]):
       cancel += 1
   elif (df["releasecount"] > df["emptyCount"]) & (df["releasecount"] > df["emptyCount"]):
       release += 1
   else:
       undetermined += 1

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().


3 commentaires

Quelle est votre sortie attendue


Avez-vous essayé de faire un pour une boucle itération sur les rangées? Parce que la façon dont je le vois, vous comparez les colonnes de l'ensemble de DF les uns avec les autres, et vous souhaitez comparer la valeur spécifique dans les 3 dernières lignes de ces colonnes.


Laissez-moi essayer de faire ça


4 Réponses :


1
votes

En général, vous devriez éviter de boucler. Voici un exemple de code vectoriel qui fait ce dont vous avez besoin:

emmptyCount    count1
cancelCount    count2
releaseCount   count3
dtype: int64


3 commentaires

hmm, comment comptez-vous les cravates ( indéterminé si les trois colonnes sont égales)?


Les cravates sont indéterminé = fr (df) - égal_max.sum () , cependant, c'est le cas où vous avez quelque chose comme 3 3 2 , c'est-à-dire pas nécessairement tous les trois égaux valeurs.


Mais cela ne compterait-il pas les liens partiels aussi (c'est-à-dire où seulement 2 colonnes sont égales)? EDIT: OK, vous avez déjà répondu à ma question :). L'OP n'est pas clair sur la manière de gérer les liens partiels, cependant.



0
votes
import pandas as pd
import numpy as np


class thing(object):
    def __init__(self):
        self.value = 0

empty , cancel ,  release , undetermined = [thing() for i in range(4)]

dictt = {   0 : empty, 1 : cancel , 2 : release , 3 : undetermined   }

df = pd.DataFrame({
    'emptyCount': [2,4,5,7,3],
    'cancelCount': [3,7,8,11,2],
    'releaseCount': [2,0,0,5,3],   
})

for i in range(1,4):
    series = df.iloc[-4+i]
    for j in range(len(series)):
        if series[j] == series.max():
            dictt[j].value +=1

cancel.value

0 commentaires

0
votes

Un petit script pour obtenir les valeurs maximales: xxx


0 commentaires

1
votes

Fist Nous trouvons les lignes indéterminées xxx

puis nous trouvons la colonne maximale des lignes déterminées xxx

et comptez-les xxx


0 commentaires