I have a dataframe with a column that includes individuals' birthdays. I would like to map that column to the individuals' astrology sign using code I found (below). I am having trouble writing the code to creat the variables.
My current dataframe looks like this
birthdate answer YEAR MONTH-DAY1970-03-31 5 1970 03-311970-05-25 9 1970 05-251970-06-05 3 1970 06-051970-08-28 2 1970 08-28
The code I found that creates a function to map the dates is available at this website: https://www.geeksforgeeks.org/program-display-astrological-sign-zodiac-sign-given-date-birth/
Any tips would be appreciated.
Change previous answer by Series.dt.month_name
with lowercase strings:
def zodiac_sign(day, month): # checks month and date within the valid range # of a specified zodiac if month == 'december': return 'Sagittarius' if (day < 22) else 'capricorn'elif month == 'january': return 'Capricorn' if (day < 20) else 'aquarius'elif month == 'february': return 'Aquarius' if (day < 19) else 'pisces'elif month == 'march': return 'Pisces' if (day < 21) else 'aries'elif month == 'april': return 'Aries' if (day < 20) else 'taurus'elif month == 'may': return 'Taurus' if (day < 21) else 'gemini'elif month == 'june': return 'Gemini' if (day < 21) else 'cancer'elif month == 'july': return 'Cancer' if (day < 23) else 'leo'elif month == 'august': return 'Leo' if (day < 23) else 'virgo'elif month == 'september': return 'Virgo' if (day < 23) else 'libra'elif month == 'october': return 'Libra' if (day < 23) else 'scorpio'elif month == 'november': return 'scorpio' if (day < 22) else 'sagittarius'
dates = pd.to_datetime(astrology['birthdate'])
y = dates.dt.year
now = pd.to_datetime('now').year
astrology = astrology.assign(month = dates.dt.month_name().str.lower(),day = dates.dt.day,year = y.mask(y > now, y - 100))
print (astrology)birthdate answer YEAR MONTH-DAY month day year
0 1970-03-31 5 1970 03-31 march 31 1970
1 1970-05-25 9 1970 05-25 may 25 1970
2 1970-06-05 3 1970 06-05 june 5 1970
3 1970-08-28 2 1970 08-28 august 28 1970
astrology['sign'] = astrology.apply(lambda x: zodiac_sign(x['day'], x['month']), axis=1)
print (astrology)birthdate answer YEAR MONTH-DAY month day year sign
0 1970-03-31 5 1970 03-31 march 31 1970 aries
1 1970-05-25 9 1970 05-25 may 25 1970 gemini
2 1970-06-05 3 1970 06-05 june 5 1970 Gemini
3 1970-08-28 2 1970 08-28 august 28 1970 virgo