J'ai un Python Pandas DataFrame contenant les dates de naissance des joueurs de hockey qui ressemble à ceci:
Data['Birth Date'] = Data['Birth Date'].str.split('-').str[1:]
Je veux créer une nouvelle colonne intitulée "Draft Year" qui est calculée en fonction de cette règle :
Player Birth Year Birth Date Draft Year Player A 1990 1990-05-12 2008 Player B 1991 1991-10-30 2010 Player C 1992 1992-09-10 2010 Player D 1990 1990-11-15 2009
Cela ferait la sortie de l'exemple:
If MM-DD is before 09-15, Draft Year = Birth Year + 18 Else if MM-DD is after 09-15 Draft Year = Birth Year + 19
J'ai essayé de séparer le MM-DD de le format de date en utilisant
Player Birth Year Birth Date Player A 1990 1990-05-12 Player B 1991 1991-10-30 Player C 1992 1992-09-10 Player D 1990 1990-11-15
Mais cela me renvoie une liste de [mm, jj] avec laquelle il est difficile de travailler. Toute suggestion sur la façon de procéder de manière concise serait grandement appréciée!
3 Réponses :
Utilisez numpy.where
:
Player Birth Year Birth Date Draft Year 0 PlayerA 1990 1990-05-12 2008 1 PlayerB 1991 1991-10-30 2010 2 PlayerC 1992 1992-09-10 2010 3 PlayerD 1990 1990-11-15 2009
Sortie
data['Birth Date']=pd.to_datetime(data['Birth Date']) #to convert to datetime cond=(df['Birth Date'].dt.month>=9)&(df['Birth Date'].dt.day>=15) cond2=(df['Birth Date'].dt.month>=10) data['Draft Year']=np.where(cond|cond2,data['Birth Year']+19,data['Birth Year']+18) print(data)
Créez une colonne correspondant à 100 * le mois et ajoutez-la au jour
cutoff = df['Birth Date'].pipe(lambda d: d.dt.month * 100 + d.dt.day) df['Draft Year'] = df['Birth Year'] + 18 + (cutoff > 915) df Player Birth Year Birth Date Draft Year 0 Player A 1990 1990-05-12 2008 1 Player B 1991 1991-10-30 2010 2 Player C 1992 1992-09-10 2010 3 Player D 1990 1990-11-15 2009
Les dates et heures au format aaaa-mm-jj
peuvent être triées sous forme de chaînes. Cette solution tire parti de ce fait:
df['Draft Year'] = df['Birth Year'] + np.where(df['Birth Date'].dt.strftime('%m-%d') < '09-15', 18, 19)
Hockey sur glace, hockey sur gazon ou hockey sur air?