1
votes

Avoir un problème d'ajout à la fonction de liste à l'intérieur

J'ai le tableau suivant qui a un ID unique, une sortie réelle et modélisée.

new_list = []

def isolate_diff(df):
    if df['Modeled'].any() != df['Actual'].any():
        new_list.appened(df['Pass_ID'])
    else:
        pass

    return new_list

J'ai écrit la fonction suivante afin de pouvoir générer une liste que je vais éventuellement transformer en dataframe afin que je puisse facilement rappeler les lignes de chaque Pass_ID pour voir si je peux isoler pourquoi le le modèle ne fonctionne pas pour ces lignes. Cependant, la liste revient toujours vide.

   Pass_ID Actual Modeled 
0    100     1      1
1    101     0      1 
2    102     1      0  
3    103     1      1

Comment puis-je résoudre ce problème?


3 commentaires

Votre code est incorrect. Il doit être ajouter au lieu de ajouté à la ligne 5.


Vous n'appelez jamais votre fonction isolate_diff (df) . Essayez d'ajouter new_list = isolate_diff (df) au bas de votre script


Il est préférable de définir new_list dans isolate_diff car la fonction renverra new_list .


3 Réponses :


0
votes

Vous avez écrit une condition globale, pas une condition vectorisée:

if True != True

Chaque terme est True si un élément est 1 . Cela évalue rapidement à

if df['Modeled'].any() != df['Actual'].any():

qui vous donne une new_list vide .

À la place, écrivez une expression saisissant df ['Pass_ID'] , filtré df ['Modeled']! = Df ['Actual'] . Pouvez-vous partir de là?


0 commentaires

0
votes

Remplacez new_list.appened (df ['Pass_ID']) par new_list.append(df['Pass_ID' )

Edit: Prune et U9 ont détecté quelques autres erreurs. Ce fut la première chose incorrecte que j'ai vue. Veuillez vous reporter à leurs réponses pour des révisions plus détaillées


0 commentaires

1
votes

Je suis d'accord avec @Prune, mais pour le résoudre, je pense que vous avez besoin d'une solution complètement différente:

[101, 102]

Résultat:

print(df.loc[df['Modeled']!=df['Actual'],'Pass_ID'].tolist())

Si vous voulez une liste de Pass_ID :

   Pass_ID  Actual  Modeled
1      101       0        1
2      102       1        0

Output:

print(df[df['Modeled']!=df['Actual']])


1 commentaires

Wow. c'est génial. Merci beaucoup. Je pense que j'ai fini apprécie vraiment l'aide de chacun