Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
387 views
in Technique[技术] by (71.8m points)

Map column birthdates in python pandas df to astrology signs

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-DAY
    1970-03-31    5    1970    03-31
    1970-05-25    9    1970    05-25
    1970-06-05    3    1970    06-05
    1970-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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...