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
ajouterau 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_listdansisolate_diffcar la fonction renverranew_list.