我在数据框amenities
中有列'df
'
示例:
amenities
0 {'TV','Wifi','Heater'}
1 {'Heater','Swimming Pool'}
2 {'Pet friendly','Heater'}
我需要执行一种热编码操作,以便获得这样的新数据框。
amenities Heater PF SP TV Wifi
0 {'TV','Wifi','Heater'} 1 0 0 1 1
1 {'Heater','Swimming Pool'} 1 0 1 0 0
2 {'Pet friendly','Heater'} 1 1 0 0 0
最好与新的列名匹配字符串。我写《 PF for Pet Friendly》只是为了方便别人。
答案 0 :(得分:2)
如果列由字符串填充,请使用Series.str.strip
和Series.str.get_dummies
与DataFrame.join
和MultiLabelBinarizer
来添加原始列,还可以根据需要strip
''
从{ {1}}:
rename
如果由集合填充,则首先转换为字符串:
df1 = (df['amenities'].str.strip('{}')
.str.get_dummies(',')
.rename(columns= lambda x: x.strip("'")))
df2 = df[['amenities']].join(df1)
df1 = (df['amenities'].astype(str)
.str.strip('{}')
.str.get_dummies(',')
.rename(columns= lambda x: x.strip("'")))
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df1 = pd.DataFrame(mlb.fit_transform(df['amenities']),columns=mlb.classes_)