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 Réponses :
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é où df ['Modeled']! = Df ['Actual']
. Pouvez-vous partir de là?
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
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']])
Wow. c'est génial. Merci beaucoup. Je pense que j'ai fini apprécie vraiment l'aide de chacun
Votre code est incorrect. Il doit être
ajouter
au lieu deajouté
à la ligne 5.Vous n'appelez jamais votre fonction
isolate_diff (df)
. Essayez d'ajouternew_list = isolate_diff (df)
au bas de votre scriptIl est préférable de définir
new_list
dansisolate_diff
car la fonction renverranew_list
.