亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 python pandas df 中的列生日映射到占星術符號

將 python pandas df 中的列生日映射到占星術符號

尚方寶劍之說 2022-11-01 15:46:03
我有一個包含個人生日的列的數據框。我想使用我找到的代碼(如下)將該列映射到個人的占星術符號。我無法編寫代碼來創建變量。我當前的數據框看起來像這樣     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我發現創建日期映射函數的代碼可在此網站上找到:https ://www.geeksforgeeks.org/program-display-astrological-sign-zodiac-sign-given-date-birth/任何提示將不勝感激。
查看完整描述

2 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

Series.dt.month_name用小寫字符串更改先前的答案:

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


查看完整回答
反對 回復 2022-11-01
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

您可以將zodiac_sign函數應用于數據框 -


import pandas as pd

from io import StringIO


# Sample

x = StringIO("""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

""")



df = pd.read_csv(x, sep=',')


df['birthdate'] = pd.to_datetime(df['birthdate'])

df['zodiac_sign'] = df['birthdate'].apply(lambda x: zodiac_sign(x.day, x.strftime("%B").lower()))

print(df)

輸出:


   birthdate  answer  YEAR MONTH-DAY zodiac_sign

0 1970-03-31       5  1970     03-31       aries

1 1970-05-25       9  1970     05-25      gemini

2 1970-06-05       3  1970     06-05      Gemini

3 1970-08-28       2  1970     08-28       virgo


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號