第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何將數(shù)字?jǐn)?shù)據(jù)映射到Pandas數(shù)據(jù)框中的類別/箱

如何將數(shù)字?jǐn)?shù)據(jù)映射到Pandas數(shù)據(jù)框中的類別/箱

慕田峪9158850 2019-12-06 09:37:21
我剛剛開始使用python進(jìn)行編碼,而我的一般編碼技能相當(dāng)生銹:(所以請耐心等待它大約有300萬行。年齡單位共有3種:Y,D,W(年),天和周。任何1歲以上的人的年齡單位均為Y,而我想要的第一個分組年齡小于2歲,因此我要測試的所有年齡單位均為Y ...我想創(chuàng)建一個新列AgeRange并填充以下范圍:<22-1818-3535-6565歲以上所以我寫了一個函數(shù)def agerange(values):    for i in values:        if complete.Age_units == 'Y':            if complete.Age > 1 AND < 18 return '2-18'            elif complete.Age > 17 AND < 35 return '18-35'            elif complete.Age > 34 AND < 65 return '35-65'            elif complete.Age > 64 return '65+'        else return '< 2'我以為如果整體傳入數(shù)據(jù)框,我會得到所需的信息,然后可以創(chuàng)建需要以下內(nèi)容的列:agedetails['age_range'] = ageRange(agedetails)但是,當(dāng)我嘗試運行第一個代碼來創(chuàng)建所得到的功能時:  File "<ipython-input-124-cf39c7ce66d9>", line 4    if complete.Age > 1 AND complete.Age < 18 return '2-18'                          ^SyntaxError: invalid syntax顯然,它不接受AND-但我想我在課堂上聽說可以使用AND這樣?我一定弄錯了,但是這樣做的正確方法是什么?因此,在收到該錯誤后,我什至不確定傳入數(shù)據(jù)幀的方法是否也會引發(fā)錯誤。我猜大概是。在這種情況下-我也將如何使它工作?我想學(xué)習(xí)最好的方法,但是對我來說,最好的方法的一部分就是使它保持簡單,即使這意味著要分幾個步驟來做...
查看完整描述

2 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗 獲得超6個贊

使用Pandas時,應(yīng)避免按行操作,因為這些操作通常涉及效率低下的Python級循環(huán)。這里有兩個選擇。


熊貓: pd.cut

正如@JonClements所建議的,您可以使用pd.cut它,這里的好處是您的新列將成為Categorical。


您只需要定義邊界(包括np.inf)和類別名稱,然后將其應(yīng)用于pd.cut所需的數(shù)字列即可。


bins = [0, 2, 18, 35, 65, np.inf]

names = ['<2', '2-18', '18-35', '35-65', '65+']


df['AgeRange'] = pd.cut(df['Age'], bins, labels=names)


print(df.dtypes)


# Age             int64

# Age_units      object

# AgeRange     category

# dtype: object

NumPy: np.digitize

np.digitize提供另一種干凈的解決方案。這個想法是定義邊界和名稱,創(chuàng)建字典,然后應(yīng)用于“ np.digitize年齡”列。最后,使用字典來映射類別名稱。


請注意,對于邊界情況,下限用于映射到bin。


import pandas as pd, numpy as np


df = pd.DataFrame({'Age': [99, 53, 71, 84, 84],

                   'Age_units': ['Y', 'Y', 'Y', 'Y', 'Y']})


bins = [0, 2, 18, 35, 65]

names = ['<2', '2-18', '18-35', '35-65', '65+']


d = dict(enumerate(names, 1))


df['AgeRange'] = np.vectorize(d.get)(np.digitize(df['Age'], bins))

結(jié)果

   Age Age_units AgeRange

0   99         Y      65+

1   53         Y    35-65

2   71         Y      65+

3   84         Y      65+

4   84         Y      65+


查看完整回答
反對 回復(fù) 2019-12-06
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗 獲得超9個贊

這是BRILLIANT!感謝您為提供這樣清晰而周到的響應(yīng)而付出的麻煩,并且添加垃圾桶/熊貓切割方法的細(xì)節(jié)是錦上添花的完美方法。這是最簡單最優(yōu)雅的方法,我當(dāng)然會使用它,謝謝。我在所有關(guān)于Bins的工作中都看過某個地方-但還沒有弄清楚如何應(yīng)用它,當(dāng)然也不知道它會多么容易!再次感謝

查看完整回答
反對 回復(fù) 2019-12-06
  • 2 回答
  • 0 關(guān)注
  • 515 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號