我有这种数据框。
import pandas as pd
df = pd.DataFrame({'year': [1894, 1976, 1995, 2001, 1993]})
目前 dataframe
year
0 1894
1 1976
2 1995
3 2001
4 1993
如何有效地添加一个热编码列,以便数据框看起来像这样。
预期的 dataframe
year 1800s 1900s 2000s
0 1894 1 0 0
1 1976 0 1 0
2 1995 0 1 0
3 2001 0 0 1
4 1993 0 1 0
我已经尝试过下面的代码,并且可以正常工作。但是我认为有更好的解决方案,您能推荐我使用什么功能吗?谢谢!
编码
df['year'] = df['year'].astype(str)
df['1800s'] = df['year'].apply(lambda x: 1 if x[:2] == '18' else 0)
df['1900s'] = df['year'].apply(lambda x: 1 if x[:2] == '19' else 0)
df['2000s'] = df['year'].apply(lambda x: 1 if x[:2] == '20' else 0)
使用整数除法对前2位数字使用get_dummies
,将列名称重命名为DataFrame.add_suffix
,最后一次DataFrame.join
用于添加至原始数字:
df = df.join(pd.get_dummies(df['year'] // 100).add_suffix('00s'))
print (df)
year 1800s 1900s 2000s
0 1894 1 0 0
1 1976 0 1 0
2 1995 0 1 0
3 2001 0 0 1
4 1993 0 1 0
print (df['year'] // 100)
0 18
1 19
2 19
3 20
4 19
Name: year, dtype: int64
print (pd.get_dummies(df['year'] // 100).add_suffix('00s'))
1800s 1900s 2000s
0 1 0 0
1 0 1 0
2 0 1 0
3 0 0 1
4 0 1 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句