1 pièce(s) jointe(s)
Création d'une colonne dasn un dataframe sous condition en utilisant la fonction eval
Bonjour,
Je me prends la tête depuis hier et je ne trouve pas de solution satisfaisante.
J'ai récupéré des données de tirs en biathlon qui sont sous ce format:
Pour l'exercice à deux tirs : 2+3
Pour l'exercice à quatre tirs : 0+3+1+2
Je souhaite déterminer le pourcentage de réussite de chaque athlète (pour un exercice à deux tirs 100% de réussite c'est 0+0)
Pièce jointe 536799
j'ai tenté de faire une boucle... mais c'est hyper long et ça ne fonctionne pas la colonne statistique de tir est vide
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| for index, row in data_all.iterrows():
#exercice à deux tirs
try:
if len(row.Shootings)==3 | len(row.Shootings)==4:
tirs_rat= eval(row.Shootings)
if tirs_rat <=10:
row.Shootings_stats = ((-10*tirs_rat) +100)
elif len(row.Shootings)==7:
tirs_rat=eval(row.Shootings)
if tirs_rat <=20:
row.Shootings_stats = ((-5*tirs_rat) +100)
print(row.Shootings_stats)
except (RuntimeError, TypeError, NameError):
Shootings_stats_calc.append('NA')
pass
print(data_all.Shootings_stats) |
J'ai aussi tenté ce genre de chose mais cela ne fonctionne pas non plus:
Code:
data_all['Shootings_stats']=[(-(eval(str(x))*10 +100)) if len(str(x))==3 | len(str(x))==4 else (-(eval(str(x))*20 +100)) for x in data_all['Shootings']]
Code:
1 2 3
| values_twoshoot = (-(eval(data_all.Shootings.str)*10 +100))
data_all['Shootings_stats']= values_twoshoot.where(data_all.testlong ==3 | data_all.testlong==4) |
Merci d'avance pour votre aide !!!