goe*_*ash 6 python numpy pandas scikit-learn
这类似于scikit-learn 中的LabelEncoder,但要求数值分配按类别的频率顺序发生,即较高的出现类别被分配最高/最低(取决于用例)编号。
例如,如果变量可以[a, b, c]采用频率值,例如
Category
0 a
0 a
0 a
0 a
0 a
1 b
1 b
1 b
1 b
1 b
1 b
1 b
1 b
1 b
1 b
2 c
2 c
Run Code Online (Sandbox Code Playgroud)
a出现5次,b出现10次,c出现2次。然后我希望替换完成为b=1,a=2和c=3。
正如 @Vivek Kumar 所建议的,我使用了地图功能,使用排序列值的字典作为键,使用它们的位置作为值:
data.Category = data.Category.map(dict(zip(data.Category.value_counts().index, range(1, len(data.Category.value_counts().index)+1))))
Run Code Online (Sandbox Code Playgroud)
看起来有点脏,最好将其分成几行,如下所示:
sorted_indices = data.Category.value_counts().index
data.Category = data.Category.map(dict(zip(sorted_indices, range(1, len(sorted_indices)+1))))
Run Code Online (Sandbox Code Playgroud)
这是最接近我的要求的。输出如下所示:
Category
0 2
1 2
2 2
3 2
4 2
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
15 3
16 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |