J'ai un jeu de données qui ressemble à l'image ci-dessous,
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().
4 Réponses :
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
hmm, comment comptez-vous les cravates ( indéterminé code> si les trois colonnes sont égales)?
Les cravates sont indéterminé = fr (df) - égal_max.sum () code>, cependant, c'est le cas où vous avez quelque chose comme 3 3 2 code>, 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.
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
Un petit script pour obtenir les valeurs maximales:
Fist Nous trouvons les lignes indéterminées puis nous trouvons la colonne maximale des lignes déterminées p> et comptez-les p>
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