如何对列中的值进行单热编码,同时将某些值视为同一类别

时间:2017-05-31 08:49:44

标签: pandas one-hot-encoding

我想在Pandas数据帧中使用单热编码列。该列中的某些值具有较低的发生率,因此我希望将它们视为相同的类别。是通过使用one-hot-encoder或get_dummies方法来实现此目的的方法吗? 我提出的一种方法是在编码之前用dict替换这些值。任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您可以使用:

df = pd.DataFrame({'A':[1,2,3,4,5,6,6,5,4]}).astype(str)
print (df)
   A
0  1
1  2
2  3
3  4
4  5
5  6
6  6
7  5
8  4

首先使用value_countsboolean indexing获取低于阈值的所有值,然后在dict comprehension中添加与0相同的标量值。最后replace

tresh = 2
s = df['A'].value_counts()
d = {x:0 for x in s[s < tresh].index}
print (d)
{'1': 0, '3': 0, '2': 0}

df = df.replace(d)
print (df)
   A
0  0
1  0
2  0
3  4
4  5
5  6
6  6
7  5
8  4

print (pd.get_dummies(df, prefix='', prefix_sep=''))
   0  4  5  6
0  1  0  0  0
1  1  0  0  0
2  1  0  0  0
3  0  1  0  0
4  0  0  1  0
5  0  0  0  1
6  0  0  0  1
7  0  0  1  0
8  0  1  0  0