问题陈述:我想对这个单一样本进行单热编码:
In [2]: single_sample = pd.DataFrame({"Color":['Green']})
Color
0 'Green'
使用与此数据帧相同的单热编码:
In [3]: df = pd.DataFrame({"Color":['Red', 'Blue', 'Green', 'Orange']})
Color
0 'Red'
1 'Blue'
2 'Green'
3 'Orange'
应用one-hot编码后,大数据帧看起来像;
In [4]: pd.get_dummies(df)
Color_Blue Color_Green Color_Orange Color_Red
0 0 0 0 1
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
我想要单个样本;
Color_Blue Color_Green Color_Orange Color_Red
0 0 1 0 0
我想到实现这一目标的唯一方法是将单个样本连接到数据帧,然后执行单热编码操作或编写我自己的单热编码器,我可以将其应用于给定的列。
是否有更好的方法以某种方式保存操作.get_dummies()函数适用?
答案 0 :(得分:3)
您可以按df1
:
reindex
列
df1 = pd.get_dummies(df)
print (df1)
Color_Blue Color_Green Color_Orange Color_Red
0 0 0 0 1
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
print (pd.get_dummies(single_sample).reindex(columns=df1.columns, fill_value=0))
Color_Blue Color_Green Color_Orange Color_Red
0 0 1 0 0
另一种可能的解决方案是按list comprehension
创建新列:
cols = ('Color_' + df.Color.sort_values()).unique().tolist()
print (cols)
['Color_Blue', 'Color_Green', 'Color_Orange', 'Color_Red']
print (pd.get_dummies(single_sample).reindex(columns=cols, fill_value=0))
Color_Blue Color_Green Color_Orange Color_Red
0 0 1 0 0